【发布时间】: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