Koe*_*per 11 javascript mobile-safari ios smartbanner
我在iOS智能应用横幅上遇到了一些麻烦,我正试图通过JavaScript添加它.
实际的smartbanner就像将这个小块添加到HTML的头部一样简单:
<meta name="apple-itunes-app" content="app-id=1008622954">
Run Code Online (Sandbox Code Playgroud)
不幸的是,我对上传脚本的方式非常有限.我无法直接更改HTML,因此我将通过我们的标记管理器来完成,它基本上是通过JavaScript完成的.但事实证明这不起作用.
我试图简化测试的情况:
HTML中的硬编码标签:有效(如预期的那样)
<meta name="apple-itunes-app" content="app-id=1008622954">
Run Code Online (Sandbox Code Playgroud)在文档准备就绪时直接插入JavaScript:有效
$(document).ready(function(){
$("head").append('<meta name="apple-itunes-app" content="app-id=1008622954">');
});
Run Code Online (Sandbox Code Playgroud)插入JavaScript后,setTimeout延迟:不工作
$(document).ready(function(){
setTimeout(showBanner, 1); //after 1 millisecond
});
function showBanner(){
$("head").append('<meta name="apple-itunes-app" content="app-id=1008622954">');
}
Run Code Online (Sandbox Code Playgroud)任何人都可以确认或解释为什么这个延迟的JavaScript不起作用?
重要提示:测试在实际的iOS设备上打开页面!桌面Safari/Chrome或iOS模拟器无法使用.此外,请勿关闭横幅,因为它不会再次出现.
更新:
我添加了一些没有jQuery的例子,所以简单的'ol JavaScript.但结果是一样的.一旦我们等待setTimeout()智能应用程序横幅无法加载.
Vanilla JavaScript - 直接执行.作品
showBanner();
function showBanner() {
var meta = document.createElement("meta");
meta.name = "apple-itunes-app";
meta.content = "app-id=1008622954";
document.head.appendChild(meta);
}
Run Code Online (Sandbox Code Playgroud)Vanilla JavaScript - 延迟执行.什么都不行
setTimeout(showBanner, 1);
function showBanner() {
var meta = document.createElement("meta");
meta.name = "apple-itunes-app";
meta.content = "app-id=1008622954";
document.head.appendChild(meta);
}
Run Code Online (Sandbox Code Playgroud)更新2:
异步加载脚本时可以观察到完全相同的不幸行为
异步加载.什么都不行
<script src="async.js" async></script>
Run Code Online (Sandbox Code Playgroud)
然后使用直接执行showBanner()调用相同的vanilla JavaScript;
function showBanner() {
var meta = document.createElement("meta");
meta.name = "apple-itunes-app";
meta.content = "app-id=1008622954";
document.head.appendChild(meta);
}
Run Code Online (Sandbox Code Playgroud)结论:
我只能得出结论,iOS Safari只在主线程中查找smartbanner和HTML.这让我伤心:-(
只有直接可用的HTML或通过JavaScript同步添加的HTML.但是不允许进行同步操作,无论是异步加载JavaScript,还是使用setTimeout()(或使用其他构造eval())
由于如果在页面加载后插入本机横幅,则不可能让 safari 显示本机横幅(如上所述,并由苹果确认),因此唯一可行的解决方法是不使用本机 smartbanner,而是创建自己的 smartbanner。
例如,使用这样的javascript 插件
| 归档时间: |
|
| 查看次数: |
6200 次 |
| 最近记录: |