【发布时间】:2015-09-26 04:16:51
【问题描述】:
我在使用 iOS Smart App Banner 时遇到了一些问题,我正在尝试通过 JavaScript 添加它。
实际的 smartbanner 就像在 HTML 的头部添加这个小块一样简单:
<meta name="apple-itunes-app" content="app-id=375380948">
很遗憾,我上传脚本的方式非常有限。我不能直接更改 HTML,所以我将通过我们的跟踪代码管理器来完成,它基本上是通过 JavaScript 来完成的。但事实证明这是行不通的。
我试图简化测试用例:
-
HTML 中的硬编码标记:works(如预期)
<meta name="apple-itunes-app" content="app-id=375380948"> -
文档准备好后直接用 JavaScript 插入:works
$(document).ready(function(){ $("head").append('<meta name="apple-itunes-app" content="app-id=375380948">'); }); -
使用 JavaScript 插入,在 @987654332@ 延迟后: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 的示例,所以很简单的 'ol JavaScript。但结果是一样的。一旦我们等待setTimeout(),智能应用横幅就无法加载。
-
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); } -
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:
在异步加载脚本时可以观察到完全相同的不幸行为
-
异步加载。 DOES NOT WORK
<script src="async.js" async></script>然后调用相同的原生 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。这让我很难过:-(
仅直接可用的 HTML,或通过 JavaScript 同步添加的 HTML。
但是不允许异步操作,无论是异步加载 JavaScript,还是使用 setTimeout()(或其他使用 eval() 的构造)
【问题讨论】:
-
我也遇到了同样的问题。我有一个单页应用程序,我不希望应用程序下载在加载时显示,因为有一个表单我们不希望人们过去。在他们填写表格后,已经有一个带有常规下载按钮的页面,但客户也想要这个横幅。如果有人知道添加的这个对象的 Id 或类名,那就太好了,这样我就可以在加载时隐藏它,然后再显示它。我的 safari 版本是
-
看起来您的示例中的
app-id可能已过时?您的“Vanilla JavaScript - 直接执行”。看起来正是我需要的。但是,在 iPhone 12 上进行测试时,我看到横幅在 Safari 中暂时闪烁空白,而在 Chrome 中什么也没有(这实际上只是我了解到的 iOS 引擎盖下的 Safari)。无论如何,如果可能的话,也许您可以更新到某个不太可能被删除的应用程序? -
@GregVenech,我刚刚用简单的查找和替换更新了所有示例,因为该应用程序 ID 确实很旧。它现在链接到 Apple 的 Apple Store 应用程序。 apps.apple.com/nl/app/apple-store/id375380948?l=en 还没有运行任何新的测试,让我知道它是如何为你工作的。
标签: javascript ios mobile-safari smartbanner