加载iOS'智能应用横幅'通过JavaScript

时间:2015-07-08 10:08:42

标签: javascript ios mobile-safari smartbanner

我遇到了iOS Smart App Banner的麻烦,我试图通过JavaScript添加。

实际的smartbanner就像将这个小块添加到HTML的头部一样简单:

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

不幸的是,我对上传脚本的方式非常有限。我无法直接更改HTML,因此我会通过我们的跟踪代码管理器完成此操作,代码管理器基本上是通过JavaScript实现的。但事实证明,这不起作用。

我试图简化测试案例:

  1. HTML中的硬编码标记: works (按预期方式)

    <meta name="apple-itunes-app" content="app-id=1008622954">
    
  2. 文档准备好后直接使用JavaScript插入: works

    $(document).ready(function(){
        $("head").append('<meta name="apple-itunes-app" content="app-id=1008622954">');
    });
    
  3. setTimeout延迟后使用JavaScript插入: DOES NOT WORK

    $(document).ready(function(){
        setTimeout(showBanner, 1);  //after 1 millisecond
    });
    
    function showBanner(){
        $("head").append('<meta name="apple-itunes-app" content="app-id=1008622954">');
    }
    
  4. 任何人都可以确认或解释为什么延迟的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=1008622954";
          document.head.appendChild(meta);
      }
      
    2. Vanilla JavaScript - 延迟执行。的 DOES NOT WORK

      setTimeout(showBanner, 1);
      
      function showBanner() {
          var meta = document.createElement("meta");
          meta.name = "apple-itunes-app";
          meta.content = "app-id=1008622954";
          document.head.appendChild(meta);
      }
      
    3. 更新2

      异步加载脚本时可以观察到完全相同的不幸行为

      1. 异步加载。的 DOES NOT WORK

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

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

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

        我只能得出结论,iOS Safari只在主线程中查找smartbanner和HTML。这让我很伤心: - (

        只有直接可用的HTML或通过JavaScript同步添加的HTML。 但是,不允许进行同步操作,无论是异步加载JavaScript,还是使用setTimeout()(或使用eval()的其他构造)

2 个答案:

答案 0 :(得分:1)

由于如果在页面加载后插入本机横幅(如上面所测试,以及Apple的confirmed),则无法让safari显示本机横幅,唯一可行的解​​决方法是不使用本机智能横幅广告,但要创建自己的。

例如使用像this

这样的javascript插件

答案 1 :(得分:0)

截至2017年4月,智能横幅广告将在稍后通过JavaScript添加。