JavaScript を使用して追加しようとしているiOS Smart App Bannerに問題があります。
実際の smartbanner は、この小さなブロックを HTML の先頭に追加するだけです。
<meta name="apple-itunes-app" content="app-id=375380948">
残念ながら、スクリプトをアップロードする方法はかなり制限されています。HTML を直接変更することはできないので、基本的に JavaScript を介して行うタグ マネージャーを使用して行います。しかし、これはうまくいかないことがわかりました。
テストのためにケースを単純化しようとしました:
HTML のハードコードされたタグ:動作します(期待どおり)
<meta name="apple-itunes-app" content="app-id=375380948">
ドキュメントの準備ができたら JavaScript で直接挿入:動作
$(document).ready(function(){ $("head").append('<meta name="apple-itunes-app" content="app-id=375380948">'); });
setTimeout
遅れて JavaScript で挿入:動作しません$(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()
Smart App Bannerを待っているとすぐに読み込みに失敗します。
バニラ JavaScript - 直接実行。作品
showBanner(); function showBanner() { var meta = document.createElement("meta"); meta.name = "apple-itunes-app"; meta.content = "app-id=375380948"; document.head.appendChild(meta); }
バニラ JavaScript - 遅延実行。動作しません
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 :
スクリプトを非同期でロードすると、まったく同じ不幸な動作が観察される可能性があります
非同期読み込み。動作しません
<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 のみ。ただし、JavaScript を非同期的にロードするsetTimeout()
か、(または を使用する他の構成要素eval()
)を使用して、a-sync アクションは許可されません。