【问题标题】:External javascripts delay load. SCRIPT src attribute doesn't work? Only IFRAME src works外部 javascripts 延迟加载。 SCRIPT src 属性不起作用?只有 IFRAME src 有效
【发布时间】:2014-07-28 23:28:28
【问题描述】:

我正在尝试解决script id="img" 标签的问题。我在两个不同的页面上使用下面的两个脚本,但在这两种情况下脚本都不会加载。

在第一个示例中,IFRAMES 在 5 秒和 8 秒后完美加载,在第二个示例中都在 5 秒后加载,我也想加载 js 文件,但它们没有加载。

谁能帮我解决这个问题?我需要在代码中添加/修改什么才能使其正常工作?提前致谢。

示例 1

<script type="text/javascript">
window.onload = function() {
    setTimeout(function(){loadfunction('map','https://www.example1.com/maps/')},5000);
    setTimeout(function(){loadfunction('fbook','https://www.example2.com/')},8000);
    setTimeout(function(){loadfunction('img','https://www.mywebpage.com/img.js')},10000);
}
function loadfunction(id,url) {
    document.getElementById(id).src = url;
} 
</script>

下面的脚本做同样的事情,但在 5 秒内同时加载它们,但不是 img.js 文件,只有 iframe。

示例 2

<script type="text/javascript">
  window.onload = function() {
    setTimeout(loadfunction,5000)
 }
 function loadfunction() {
    document.getElementById("map").src = "https://www.example1.com/maps/"
    document.getElementById("fbook").src = "https://www.example2.com/"
    document.getElementById("img").src = "http://www.mywebpage.com/img.js"
 }
</script>

在两个页面的正文中,我都有下面的代码......

<iframe id="map" width="730" height="400" frameborder="0" style="border:0" allowtransparency="true"></iframe> 
<iframe id="fbook" width="730" height="400" frameborder="0" style="border:0" allowtransparency="true"></iframe>
<script id="img" type="text/javascript"></script>

【问题讨论】:

  • 您的要求真的一点都不清楚。什么是“脚本 ID 函数”?
  • 嗨,也许我没有正确表达自己。我的意思是当我在脚本上放置 ID 标签时,我正在使用的脚本不起作用,但它适用于 iframe。我只是想延迟加载img.js,就像两个iframe一样,但不知道怎么做?
  • &lt;script&gt; 标签上添加一个“id”属性实际上并没有任何作用。 “适用于 iframe”也很令人困惑。真的还不清楚你在问什么。
  • @LavenderBlue 脚本在遇到脚本标签时被解析。如果脚本标签中没有src 属性,则解析器假定在标签之间找到脚本的文本。如果有src 属性,则会加载脚本,忽略标签之间的内容。此外,脚本是不可变的,您无法更改曾经解析过的脚本的内容。如果要延迟加载脚本,则必须创建一个新的脚本标签并设置其src
  • 我确实尝试在脚本上使用 src 标签,但它不起作用。脚本立即加载,没有延迟。我尝试了一个空的 src="" 脚本没有加载和显示,当我尝试使用 src="img.js" 脚本只是加载而没有延迟?

标签: javascript iframe load delay onload


【解决方案1】:

脚本按照它们在 HTML 代码中出现的顺序执行。如果省略src,则script 标签之间的内容被解析为脚本。如果src存在,则加载脚本,忽略标签之间的内容。

无论你怎么做,你都不能在脚本被解析后改变它的内容。

最好的方法是创建一个新的脚本元素并给它一个src 属性,在window.onload 处理函数中是这样的:

setTimeout(function () {
    var script = document.createElement('script');
    script.src = 'https://www.mywebpage.com/img.js';
    document.body.appendChild(script);
}, 10000);

【讨论】:

  • 感谢您的快速回复。我已经尝试过了,但仍然无法正常工作。我已经在 iframe 中使用 setTimeout( 函数,所以当我尝试为 js 文件放置单独的脚本时不起作用。我似乎无法让它在没有 iframe 的情况下单独工作。我需要包含在正文部分 或者您推荐的上述脚本将创建 mywebpage.com/img.js 并将其解析到正文中?
  • @LavenderBlue 是的,它会在正文末尾创建一个新脚本。把上面的代码放到window.onload handlerit works中。
  • 我很抱歉,看起来作为一个女孩我不太擅长这些事情 :(,确实尝试过,但仍然无法正常工作。请您发送我完整的工作脚本,包括两个 iframe 和 img.js 都延迟加载。我希望能够为每个单独的 iframe 和 js 文件设置不同的加载时间。很抱歉让您感到痛苦。谢谢。丽莎
  • 我之前的评论中有一个小提琴的链接。请注意,window.onload 在页面上的所有资源被加载后被触发,包括 iframe 的内容。确保设置为src 的路径正确,并且您加载的脚本确实有效。
  • 试过了,还是没有成功。 js 文件不会出现在结果窗口中。这是来自Dynamicdrive网站的一个简单的js文件,只是一个文本效果:dynamicdrive.com/dynamicindex10/topmsg.js当我把它放到你在链接上给出的代码中,然后更新并运行js没有出现6秒后,因为它在那里说明?跨度>
猜你喜欢
  • 1970-01-01
  • 2020-08-13
  • 1970-01-01
  • 2016-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-24
  • 2019-08-04
相关资源
最近更新 更多