通过JavaScript加载iOS“智能应用程序横幅”

iqxoj9l9  于 2023-08-08  发布在  iOS
关注(0)|答案(3)|浏览(108)

我在使用iOS Smart App Banner时遇到了一些问题,我试图通过JavaScript添加它。
实际的smartbanner很简单,只需将这个小块添加到HTML的头部:

<meta name="apple-itunes-app" content="app-id=375380948">

字符串
不幸的是,我在上传脚本的方式上受到了很大的限制。我不能直接更改HTML,所以我将通过我们的标记管理器来完成,它基本上是通过JavaScript来完成的。但事实证明,这并不起作用。
我试图简化测试的情况:

  1. HTML中的硬编码标记:works(如预期)
<meta name="apple-itunes-app" content="app-id=375380948">


1.当文档准备好时直接用JavaScript插入:works

$(document).ready(function(){
     $("head").append('<meta name="apple-itunes-app" content="app-id=375380948">');
 });


1.用JavaScript插入,经过setTimeout延迟:DOES NOT WORK

$(document).ready(function(){
     setTimeout(showBanner, 1);  //after 1 millisecond
 });

 function showBanner(){
     $("head").append('<meta name="apple-itunes-app" content="app-id=375380948">');
 }


有人能证实或解释为什么这个延迟的JavaScript不工作吗?
重要:测试时,请在实际iOS设备上打开页面!桌面Safari/Chrome或iOS模拟器无法工作。另外,不要关闭横幅,因为它不会再次显示。

更新

我添加了一些没有jQuery的示例,所以简单的JavaScript。但结果是一样的。只要我们等待setTimeout(),智能应用程序横幅就无法加载。

  1. Vanilla JavaScript -直接执行。works
showBanner();

function showBanner() {
    var meta = document.createElement("meta");
    meta.name = "apple-itunes-app";
    meta.content = "app-id=375380948";
    document.head.appendChild(meta);
}

  1. Vanilla JavaScript -延迟执行。DOES NOT WORK
setTimeout(showBanner, 1);

function showBanner() {
    var meta = document.createElement("meta");
    meta.name = "apple-itunes-app";
    meta.content = "app-id=375380948";
    document.head.appendChild(meta);
}

更新2

异步加载脚本时,也会观察到完全相同的不幸行为
1.异步加载。DOES NOT WORK

<script src="async.js" async></script>


然后直接执行showBanner()调用相同的普通JavaScript;

function showBanner() {
    var meta = document.createElement("meta");
    meta.name = "apple-itunes-app";
    meta.content = "app-id=375380948";
    document.head.appendChild(meta);
}

结论

我只能得出结论,iOS Safari只在主线程中查找HTML中的smartbanner。这让我很难过:(
只有直接可用的HTML,或通过JavaScript同步添加的HTML。但是不允许a-sync操作,无论是异步加载JavaScript,还是使用setTimeout()(或其他使用eval()的构造)

j2datikz

j2datikz1#

由于safari不可能在页面加载后插入本机横幅(如上所述,以及apple的confirmed),因此唯一可行的解决方法是不使用本机smartbanner,而是创建自己的。
例如使用this这样的JavaScript插件

oknwwptz

oknwwptz2#

我用了你的代码:

var meta = document.createElement("meta");
meta.name = "apple-itunes-app";
meta.content = "app-id=375380948";
document.head.appendChild(meta);

字符串
并在DOM就绪事件之前插入,它工作正常。

5cg8jx4n

5cg8jx4n3#

自2017年4月起,如果稍后通过JavaScript添加,智能横幅将显示。

相关问题