【问题标题】:Script not evaluating in non-chromium-based browsers脚本未在非基于 Chromium 的浏览器中评估
【发布时间】:2015-09-05 03:20:54
【问题描述】:

好的,所以我的公司有一个下载页面,允许访问者下载有关产品或目录的信息,可以在这里找到:Downloads

问题是,当您单击 Brandfolder 图像时,应该会出现一个弹出窗口,该窗口在 Google Chrome、Opera 和 Safari 上运行良好。但是在 Internet Explorer 和 Mozilla Firefox 中,我收到一个控制台错误,指出:

品牌文件夹未定义

参考这个文件:

<div class="container-fluid page-downloads" id="downloads-page-container">
    <div class="content-well col-sm-10 col-sm-offset-1 col-xs-12" style="float: none;">
        <div class="col-xs-12 col-sm-12" style="padding: 0; margin-bottom: 65px;">
            <h1 class="downloads-title">BRANDFOLDER</h1>
            <hr />
            <div class="brandfolder-section col-xs-12 col-sm-6">
<!-- ONCLICK ISSUE --><button onclick="Brandfolder.showEmbed({brandfolder_id: 'finisswim'});return false;" title="FINIS, Inc. Logos &amp; Other Brand Assets" style="border: none; background-color: transparent; padding: 0; margin: 0;">
                    <img src="/sca/site-images/Brandfolder-Web-Button.jpg" class="downloads-banner img-responsive catalog-img" alt="Brand Folder">
                </button>
            </div>
        </div>
        ...
        ...
        ...
    </div>
</div>
<!-- BRANDFOLDER JS FILE -->
<script type="text/javascript" async="true" src="//d2sdf28wg0skh3.cloudfront.net/bf.min.js"></script>

所以我确保文件正在加载并且内容匹配,它确实如此。然后我进入控制台,登录window,并检查Brandfolder 是否已填充,但没有(但在 Chrome、Opera 和 Safari 中确实如此)。

由于它不起作用,我将它拉到我的本地主机,启动它,它在所有浏览器上都运行良好...... wtf

我的本​​地主机是通过 NetSuite SuiteCommerce 高级平台托管的实时站点的精确副本(非常讨厌这个平台)任何想法可能会发生什么错了,看看它在基于 chromium 的浏览器中是如何工作的,但在其他浏览器中却没有,并且在开发环境中工作正常?

感谢任何输入! - 谢谢

【问题讨论】:

    标签: javascript html internet-explorer firefox netsuite


    【解决方案1】:

    Paul 和 Brandfolder 在这里。出于某种原因,可能是由于 NetSuite,bf.min.js 的 JS sn-p 没有在 Firefox 中加载,但在其他浏览器上。

    确保在每个浏览器上都会触发以下 JS 代码:

    <script type="text/javascript">(function(){var e=document.createElement("script");e.type="text/javascript";e.async=!0;e.src="//cdn.brandfolder.com/bf.min.js";var t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t)})();</script>
    

    【讨论】:

    • 这是它停止工作之前的原样,所以我把它变成了一个硬脚本标签,没有任何修复
    • 我已将其恢复为该脚本,我将不得不深入研究@RwamDev 的答案
    • 我想我明白了。脚本的最后一行需要 () 以便它变为 window.onload = init(); 我现在正在为 cdn.brandfolder.com/bf.min.js 的文件推送修复,但在 CDN 上刷新大约需要 15 分钟。
    • 你的意思是:t.parentNode.insertBefore(e,t)();??
    • 哦,不,不要这样做@Paul,这会使脚本在window.onload 准备好之前触发。问题是brandfolder脚本专门等待webkit浏览器
    【解决方案2】:

    我在以下函数上设置断点:

    if (document.addEventListener && document.addEventListener("DOMContentLoaded", init, !1),
      /WebKit/i.test(navigator.userAgent))
      var _timer = setInterval(function() {
        /loaded|complete/.test(document.readyState) && (init(),
        clearInterval(_timer))
      }
      , 10);
    window.onload = init;
    

    由于/WebKit/i.test(navigator.userAgent) 语句,init 函数仅在 webkit 上被调用。

    在我看来,DOMContentLoaded 事件是在脚本成功加载之前触发的。

    【讨论】:

    • 我会看看在window.onload 中加载脚本,看看是否有帮助..
    • 好的,所以这实际上很有帮助。但是我很困惑为什么它在本地实例中运行良好,有什么想法吗?
    • 您帮助@PaulArterburn 纠正了问题!
    猜你喜欢
    • 2015-03-12
    • 2022-01-11
    • 2020-06-19
    • 2019-12-30
    • 1970-01-01
    • 2020-01-26
    • 1970-01-01
    • 1970-01-01
    • 2017-06-06
    相关资源
    最近更新 更多