Javascript 使用DOM添加外部.js,然后从.js调用函数

Javascript 使用DOM添加外部.js,然后从.js调用函数,javascript,dom,bookmarklet,Javascript,Dom,Bookmarklet,我正试图建立一个书签。我希望最小化bookmarklette中javascript的大小,以便可以在外部文件中维护大部分代码。我的目标是。。。 1向页面添加一个外部.js文件。 2从该外部.js文件调用函数。 3.让该功能向页面添加额外的.js文件,例如JQuery源代码 这是我的1号密码。它起作用了 javascript:function bmksMain(){var script=document.createElement('script');script.src='http://loca

我正试图建立一个书签。我希望最小化bookmarklette中javascript的大小,以便可以在外部文件中维护大部分代码。我的目标是。。。 1向页面添加一个外部.js文件。 2从该外部.js文件调用函数。 3.让该功能向页面添加额外的.js文件,例如JQuery源代码

这是我的1号密码。它起作用了

javascript:function bmksMain(){var script=document.createElement('script');script.src='http://localhost/bmks/bmksBmkMain.js';scriptObj=document.body.appendChild(script);}bmksMain();
下面是.js文件的内容

function bmksBmkMaster(){
      alert('debug1');
    var script, object;
    script = document.createElement('script');
    script.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js';
    object = document.body.appendChild(script);
      alert('debug2');
    $("body").hide();
      alert('debug3');
}
bmksBmkMaster();
当我将bookmarklette代码粘贴到地址栏并执行时,调试1和2会触发,然后它就会消失。然后,如果我在不刷新页面的情况下再次执行,所有三个调试都会启动,并且都能完美工作

我可以不在同一个函数/脚本中包含一个.js并使用它吗?有些奇怪的事情正在发生

提前谢谢


在IE7和最新的Chrome浏览器中进行了测试,请查看文章及其后续文章,以了解如何做到这一点。例如,使用全局$identifier是不明智的。

以下是一种跨浏览器加载脚本的方法:

function loadScript(scriptUrl, callback){
    var script = document.createElement('script');
    script.type='text/javascript';
    script.onload = function(){
        callback(); 
            callback = function(){};

    }
    script.onreadystatechange = function () {
        if(script.readyState === 'loaded' || script.readyState === 'complete'){
            callback();
                    callback = function(){};
        } 
    }
    script.src = scriptUrl;
    document.getElementsByTagName('head').item(0).appendChild(script);
}
您可以这样使用它:

loadScript('http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js', function(){
  //hide body
});

好的,一个叫Jacob的用户已经告诉了我如何修复它,但随后他删除了他的答案。。。script.onload=函数{$body.hide;};IIRC这可能导致在某些版本的Opera中调用回调两次,我认为。在调用函数{}作为快速修复后,将其设置为回调。