从bookmarklet动态加载js脚本

时间:2012-04-02 01:54:39

标签: javascript

我正在尝试加载脚本,以便我可以在由bookmarklet生成的页面上使用脚本。 (查看src:XHR,然后是beautify.js,然后是prettify.js)

我知道我基本上应该做什么(like this)但是发生的事情是我找不到一个很好的方法来检测我需要的功能何时被实际加载。

var doWhenLoaded = function (name) {
    if (typeof(eval(name)) === 'function') {
        eval(name+'()');
    } else {
        setTimeout( 
            function () {
                console.log("from timeout: "+new Date().getTime());
                doWhenLoaded(name,call); 
            } , 50 
        );
    }
}   

我试过了,但eval(name+'()');引发了错误。

2 个答案:

答案 0 :(得分:0)

我无法回答您的问题,但要测试某项功能是否可用,请使用:

var doWhenLoaded = function (name) {   
    if (typeof window[name] == 'function') {
      window[name]();
    } else {
      // set the timeout. Should have a limit, else it wil go on forever.
    }
    ...
};

修改

更新为使用window[name],但确实应该使用对全局对象的引用。但我想可以将窗口用于浏览器特定的脚本。

上面的代码不应该抛出任何错误。由于 name 在形式参数中,因此它本质上是一个声明的局部变量。如果 name 未定义,则typeof name将返回字符串“undefined”,这将导致测试失败,因此不会评估name()

答案 1 :(得分:0)

我想我可以通过简单地编写文档而不是将它们设置为dom来强制脚本同步加载。