如何添加外部javascript文件并通过bookmarklet运行函数?

如何添加外部javascript文件并通过bookmarklet运行函数?,javascript,bookmarklet,Javascript,Bookmarklet,嗨,我正在尝试制作一个javascript书签,它将外部javascript源的链接添加到一个脱离域的页面。但是,当我运行bookmark时,什么也没有发生。请不要出错,页面上的代码也不会更改。有什么想法吗?这是我正在尝试使用的书签。谢谢你抽出时间 javascript:(function(){document.body.appendChild(document.createElement('script')).src='http://mycode.com/autopopulator.js';a

嗨,我正在尝试制作一个javascript书签,它将外部javascript源的链接添加到一个脱离域的页面。但是,当我运行bookmark时,什么也没有发生。请不要出错,页面上的代码也不会更改。有什么想法吗?这是我正在尝试使用的书签。谢谢你抽出时间

javascript:(function(){document.body.appendChild(document.createElement('script')).src='http://mycode.com/autopopulator.js';autopopulate();})(); 

我从未尝试过创建bookmarklet。但是我在网上找到了这个包含jQuery的示例,它可能对您有所帮助

它解释了如何链接到外部JS文件并在其中合并其他文件,但我认为您需要的是:

<a href="javascript:(function(){var head=document.getElementsByTagName('head')[0],script=document.createElement('script');script.type='text/javascript';script.src='http://www.site.com/your-javascript.js?' + Math.floor(Math.random()*99999);head.appendChild(script);})(); void 0">Your Bookmarklet Name</a>

您需要添加

  • 插入所需的脚本标记,然后
  • 使用计时器间隔重复检查导入脚本中的对象
  • 下面是示例代码:

    function writeTags(){
        //write the script tags
    }
    function check(){
        // example for prototype library
        if(window.Prototype && Prototype.Version){
            doActualWork();
        }else{
            window.setTimeout(check, 200);
        }
    }
    function doActualWork(){
        // this your actual code that requires
        // the loaded library
    }
    writeTags();
    check();
    

    您还可以通过回调来实现这一点:

        var addScript=function(filename,callback){
                var e=document.createElement('script');
                e.type = 'text/javascript';
                e.src = filename;
                if(callback){
                    e.onloadDone=false;//for Opera
                    e.onload=function(){e.onloadDone=true;callback();};
                    e.onReadystatechange=function(){
                        if(e.readyState==='loaded'&& !e.onloadDone){
                            e.onloadDone=true;callback();
                        }
                    }
                }
            if(typeof(e)!=='undefined'){
                document.getElementsByTagName('head')[0].appendChild(e);
            }
        }
    addScript('http://yoursite.com/js/yourScript.js',function(){functionFromYourScript();});
    

    (当然,您会想优化它以将其塞进bookmarklet中,但是您得到了这个想法……

    您可能正确地添加了script标记。我怀疑问题在于,您必须等待浏览器加载脚本,然后该函数调用才能工作。这仍然没有显示任何更改。这就好像它根本没有改变页面上的任何内容。我很好奇,通过检查脚本中的对象,我能完成什么?如果你找到了对象,你就知道脚本已经加载,你可以使用它的方法。在使用librariesheh时,这是JavaScript中的一个常见检查,结果是我自己也需要它,所以这里是压缩版本(您只需要在末尾添加带有回调的函数调用)JavaScript:var www=function(f,c){var e=document.createElement(“script”);e.type=“text/JavaScript”;e.src=f;if(typeof(e)!=“undefined”){if(c){e.onloadDone=false;e.onloadDone=function(){e.onloadDone=true;c()};e.onReadystatechange=function(){if(e.readyState==“loaded”&&&&!e.onloadDone){e.onloadDone=true;c(e.innerHTML)}}document.getElementsByTagName(“head”)[0]。appendChild(e)};