用于动态加载外部JS的任何javascript事件

Any javascript event for loading external JS on-the-fly?

本文关键字:任何 javascript 事件 JS 动态 加载 外部 用于      更新时间:2023-09-26

我一直在做一个bookmarklet项目,该项目加载外部jQuery.js文件,如下所示:

jq_script = document.createElement('SCRIPT');
jq_script.type = 'text/javascript';
jq_script.src = 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.js';
document.getElementsByTagName('head')[0].appendChild(jq_script);

但当我在这之后尝试使用jQuery时,我会收到:

未捕获的ReferenceError:jQuery未定义在chrome JS控制台上。

有没有";事件";当加载单个DOM实例时调用?(或者像这样加载外部JS文件时触发的任何事件?)

<script>元素有一个onload事件。

你可以这样做

function loadScript()
{
 jq_script = document.createElement('SCRIPT');
 jq_script.type = 'text/javascript';
 jq_script.src = 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.js';
 document.getElementsByTagName('head')[0].appendChild(jq_script);
}
window.onload = loadScript;

更新:使用下面的最新jquery代码

jQuery的getScript以下面的方式处理它。您可以将您的功能放置在if(!isAbort)中。

script = document.createElement( "script" );
script.async = "async";
if ( s.scriptCharset ) {
    script.charset = s.scriptCharset;
}
script.src = s.url;
// Attach handlers for all browsers
script.onload = script.onreadystatechange = function( _, isAbort ) {
    if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
        // Handle memory leak in IE
        script.onload = script.onreadystatechange = null;
        // Remove the script
        if ( head && script.parentNode ) {
            head.removeChild( script );
        }
        // Dereference the script
        script = undefined;
        // Callback if not abort
        if ( !isAbort ) {
            //**Do your stuff here**
        }
    }
};
// Use insertBefore instead of appendChild  to circumvent an IE6 bug.
// This arises when a base node is used (#2709 and #4378).
head.insertBefore( script, head.firstChild );