Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 静态脚本标记中的跨浏览器onload事件_Javascript_Html_Onload_This Keyword - Fatal编程技术网

Javascript 静态脚本标记中的跨浏览器onload事件

Javascript 静态脚本标记中的跨浏览器onload事件,javascript,html,onload,this-keyword,Javascript,Html,Onload,This Keyword,在html文档中,是否有跨浏览器的方式将onload事件与静态脚本标记关联 以下内容在IE 7和IE 8中不起作用: <script onload="DoThat" type="text/javascript" src="..."></script> 一些背景 我找到了一种通过动态脚本标记和if语句来实现这一点的方法。例如,在中对其进行了解释 我的问题是,我需要定位当前的脚本标记,因为我正在构建小部件,将DOM元素插入到位。过去,但它们都有缺点。我希望在脚本onlo

在html文档中,是否有跨浏览器的方式将onload事件与静态脚本标记关联

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

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

一些背景

我找到了一种通过动态脚本标记和if语句来实现这一点的方法。例如,在中对其进行了解释


我的问题是,我需要定位当前的脚本标记,因为我正在构建小部件,将DOM元素插入到位。过去,但它们都有缺点。我希望在脚本onload事件中使用“this”关键字会有所帮助。

据我所知,您需要代码来知道它属于哪个脚本元素。然后,您将在该脚本旁边插入必要的HTML小部件内容,或者将其附加到脚本父级,等等。如果是这样,那么我将向您推荐另一种方法

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

var scripts = document.getElementsByTagName('script'),
    thisScript = scripts[scripts.length - 1];
thisScript
是您要查找的DOM元素,此代码所在的当前脚本元素。这么简单

为什么它有效。 详细解释。只是一个摘要:

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

这是一种相当简单而有效的技术,尽管并不是很多人知道这种可能性。它的可靠性和100%的浏览器兼容。顺便说一下,Google使用以下代码呈现+1按钮:

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

{lang:'dk'}

那么,您认为api脚本如何获得这个散列参数呢?在我的示例中,它将是
thisScript.innerHTML

,据我所知,您需要您的代码来知道它属于哪个脚本元素。然后,您将在该脚本旁边插入必要的HTML小部件内容,或者将其附加到脚本父级,等等。如果是这样,那么我将向您推荐另一种方法

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

var scripts = document.getElementsByTagName('script'),
    thisScript = scripts[scripts.length - 1];
thisScript
是您要查找的DOM元素,此代码所在的当前脚本元素。这么简单

为什么它有效。 详细解释。只是一个摘要:

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

这是一种相当简单而有效的技术,尽管并不是很多人知道这种可能性。它的可靠性和100%的浏览器兼容。顺便说一下,Google使用以下代码呈现+1按钮:

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

{lang:'dk'}

那么,您认为api脚本如何获得这个散列参数呢?在我的示例中,它将是
thisScript.innerHTML

我不确定是否满足您的需要。
无论如何,要找到当前脚本,您可以尝试以下示例

<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>

var scripts=document.getElementsByTagName('script');
var模式='jquery-1.7.1.min.js';
var i=未定义;

对于(var x=0;x我不确定是否满足您的需求。
无论如何,要找到当前脚本,您可以尝试以下示例

<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>

var scripts=document.getElementsByTagName('script');
var模式='jquery-1.7.1.min.js';
var i=未定义;

对于(var x=0;xSo)您需要
onload
才能使用
this
来引用当前脚本元素?对,这就是为什么我在问题中添加了一些上下文。如果我可以得到“this”要指向当前脚本而不加载,我也很高兴。正如您从链接中看到的,我已经探索了许多备选方案。因此,您需要
onload
才能使用
this
来引用当前脚本元素?对,这就是为什么我在问题中添加了一些上下文。如果我能得到“this”要指出当前的脚本而不进行onload,我也很高兴。正如您从链接中看到的,我已经探索了许多备选方案。如果您遵循我问题中的链接,您将看到这是备选方案之一。断言“当带有src的脚本加载到页面中时,页面的其余部分尚未编写”对于延迟或异步脚本是不正确的。是的,如果您延迟加载,那么这绝对不合适。无论如何,这是IE7的最佳选择。如果您遵循我问题中的链接,您将看到这是一种选择。断言“当在页面中加载带有src的脚本时,页面的其余部分尚未编写”对于延迟或异步脚本是不正确的。是的,如果您延迟加载,那么这绝对不合适。无论如何,这是IE7的最佳选择。这个答案非常有意义。但是,正如我提到的,在我的案例中,问题是我有一个小部件方法,用户可以选择多次插入同一个小部件。多个脚本uld则具有相同的“模式”。这个答案非常合理。但正如我所提到的,在我的案例中的问题是,我有一个小部件方法,用户可以选择多次插入相同的小部件。多个脚本将具有相同的“模式”。