0

是否有一种跨浏览器的方式将 onload 事件与 html 文档中的静态脚本标签相关联?

以下内容在 IE 7 和 IE 8 中不起作用:

<script onload="DoThat" type="text/javascript" src="..."></script>

一些背景

我找到了一种使用动态脚本标记和 if 语句来完成此操作的方法。例如,此 MSDN 文章中对此进行了说明。

我的问题是我需要找到当前的脚本标签,因为我正在构建插入 DOM 元素的小部件。在过去,我找到了一些解决方法来做到这一点,但它们都有其缺点。我希望在脚本 onload 事件上使用“this”关键字会有所帮助。

4

2 回答 2

3

据我了解,您需要您的代码知道它属于哪个脚本元素。然后,您将在此脚本旁边插入必要的 HTML 小部件内容或附加到脚本父级等。如果是这样,那么我会建议您另一种方法。

在您的小部件 javascript 文件中,您放置下一行代码:

var scripts = document.getElementsByTagName('script'),
    thisScript = scripts[scripts.length - 1];

thisScript是您要查找的 DOM 元素,此代码位于的当前脚本元素。很简单。

为什么有效。详细解释http://feather.elektrum.org/book/src.html。只是一个摘要:

在页面中加载带有 src 的脚本时,页面的其余部分尚未写入。言下之意就是无论一个页面包含多少个脚本,当前开始执行的都是最后一个

这是相当简单和有效的技术,但没有多少人知道这种可能性。它可靠且 100% 兼容浏览器。顺便说一句,Google 使用此代码来呈现 +1 按钮:

<script type="text/javascript" src="https://apis.google.com/js/plusone.js">
  {lang: 'dk'}
</script>

那么如何思考 api 脚本如何获取这个哈希参数呢?在我的例子中,它将是thisScript.innerHTML

于 2012-01-21T20:50:02.997 回答
0

我不确定我是否满足您的需求。
无论如何要找到当前脚本,你可以试试这个例子

<script src="jquery-1.7.1.min.js" varTest="valueTest" id="myID"></script>
<script>

var scripts = document.getElementsByTagName('script');      
var pattern = 'jquery-1.7.1.min.js';
var i = undefined;

for (var x=0; x<scripts.length; x++)
{
    if (scripts[x].src.match(pattern)) { i = x; break; }
}

if (typeof(i) != 'undefined')
{
    // Do any association needed here
    var current_script = scripts[i];
    // Just for test            
    console.log(current_script.attributes);
}

</script>
于 2012-01-21T21:11:48.157 回答