【问题标题】:Loading javascript after all other scripts在所有其他脚本之后加载 javascript
【发布时间】:2023-03-03 04:28:01
【问题描述】:

我正在使用一个包含大量 javascript 的 CMS,无论是大小还是数量。

我正在尝试将 iframe.ly 添加到其中,以便可以为发布的 URL 生成卡片预览。

它在所有页面上都可以正常工作,除了那些有帖子的页面(这是最重要的),因为帖子是通过名为 stream 的 javascript 加载的,而且 iframely 的脚本似乎是在流之前加载的。

我知道这是问题所在,因为我可以使用iframely.load() 直接触发脚本,这样就可以了。但我需要在每次页面加载时自动发生这种情况。

这是我添加到标题中的脚本:<script defer charset="utf-8" src="//cdn.iframe.ly/embed.js?key=[my-api-key]" ></script>

Iframely 在他们的文档中提供了另一个选项,即:

<script defer type="text/javascript">
    function loadIframelyEmbedJs() {
        // Replace 'iframe.ly' with your custom CDN if available.
        if (document.querySelectorAll("[data-iframely-url]").length === 0
            && document.querySelectorAll("iframe[src*='iframe.ly']").length === 0) return;
        var iframely = window.iframely = window.iframely || {};
        if (iframely.load) {
            iframely.load();
        } else {
            var ifs = document.createElement('script'); ifs.type = 'text/javascript'; ifs.async = true;
            ifs.src = ('https:' == document.location.protocol ? 'https:' : 'http:') + '//cdn.iframe.ly/embed.js';
            var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ifs, s);
        }
    }
    // Run after DOM ready.
    loadIframelyEmbedJs();
</script>

这应该使 iframely “仅在需要时加载”,就像在页面中检测到嵌入时一样。但这也不能解决问题,因为它也是在流之前加载的。

如果需要,我不介意使用 jquery。

编辑:删除了对 CMS 的提及。它增加了不必要的混乱。这是一个 JavaScript 问题。

【问题讨论】:

  • 我认为其他解决方案不起作用,因为您的 DOM 已经加载。你必须走另一条路。
  • 什么意思?它工作正常。
  • 如果您的帖子在 DOM 加载后加载,那么 javascript 将无法解释它,因此您可能必须在帖子完全加载后应用 javascript。
  • 看到这就是我的想法,这就是为什么我认为我需要一种不同的解决方案。但无论出于何种原因,这确实有效。也许帖子是在 DOM 之后 稍微 加载的?只需要大约一两秒钟。我想可能是额外的代码/处理足以导致这种轻微的延迟。

标签: javascript jquery iframe


【解决方案1】:

通过将其包装在此函数中来修复它:

<script type="text/javascript">
function downloadJSAtOnload() {
var element = document.createElement("script");
element.src = "//cdn.iframe.ly/embed.js?key=[my-api-key]";
document.body.appendChild(element);
}
if (window.addEventListener)
window.addEventListener("load", downloadJSAtOnload, false);
else if (window.attachEvent)
window.attachEvent("onload", downloadJSAtOnload);
else window.onload = downloadJSAtOnload;
</script>

奇怪的是,要实现这样的目标是如此困难,或者找到有关如何做到这一点的信息。

来源:一些我再也找不到的 SEO 网站。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 2010-11-11
    • 2016-04-04
    • 2011-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多