[英]Load iOS 'smart app banner' through JavaScript
我在iOS智能應用橫幅上遇到了一些麻煩,我正試圖通過JavaScript添加它。
實際的smartbanner就像將這個小塊添加到HTML的頭部一樣簡單:
<meta name="apple-itunes-app" content="app-id=1008622954">
不幸的是,我對上傳腳本的方式非常有限。 我無法直接更改HTML,因此我將通過我們的標記管理器來完成,它基本上是通過JavaScript完成的。 但事實證明這不起作用。
我試圖簡化測試的情況:
HTML中的硬編碼標簽: 有效 (如預期的那樣)
<meta name="apple-itunes-app" content="app-id=1008622954">
在文檔准備就緒時直接插入JavaScript: 有效
$(document).ready(function(){ $("head").append('<meta name="apple-itunes-app" content="app-id=1008622954">'); });
在setTimeout
延遲之后插入JavaScript: 不工作
$(document).ready(function(){ setTimeout(showBanner, 1); //after 1 millisecond }); function showBanner(){ $("head").append('<meta name="apple-itunes-app" content="app-id=1008622954">'); }
任何人都可以確認或解釋為什么這個延遲的JavaScript不起作用?
重要提示:測試在實際的iOS設備上打開頁面! 桌面Safari / Chrome或iOS模擬器無法使用。 此外, 請勿關閉橫幅 ,因為它不會再次出現。
更新 :
我添加了一些沒有jQuery的例子,所以簡單的'ol JavaScript。 但結果是一樣的。 一旦我們等待setTimeout()
,Smart App Banner就無法加載。
Vanilla JavaScript - 直接執行。 作品
showBanner(); function showBanner() { var meta = document.createElement("meta"); meta.name = "apple-itunes-app"; meta.content = "app-id=1008622954"; document.head.appendChild(meta); }
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); }
更新2 :
異步加載腳本時可以觀察到完全相同的不幸行為
異步加載。 什么都不行
<script src="async.js" async></script>
然后使用直接執行showBanner()調用相同的vanilla JavaScript;
function showBanner() { var meta = document.createElement("meta"); meta.name = "apple-itunes-app"; meta.content = "app-id=1008622954"; document.head.appendChild(meta); }
結論 :
我只能得出結論,iOS Safari只在主線程中查找smartbanner和HTML。 這讓我傷心:-(
只有直接可用的HTML或通過JavaScript同步添加的HTML。 但是不允許進行同步操作,無論是異步加載JavaScript,還是使用setTimeout()
(或使用eval()
的其他構造)
截至2017年4月,智能橫幅廣告將在稍后通過JavaScript添加。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.