Javascript 从bookmarklet动态加载js脚本
我正在尝试加载一个脚本,以便在bookmarklet生成的页面上使用脚本。(查看src:XHR,后跟beautify.js,后跟prettify.js) 我知道我基本上应该做什么()但是现在我找不到一个好方法来检测我需要的函数何时被实际加载Javascript 从bookmarklet动态加载js脚本,javascript,Javascript,我正在尝试加载一个脚本,以便在bookmarklet生成的页面上使用脚本。(查看src:XHR,后跟beautify.js,后跟prettify.js) 我知道我基本上应该做什么()但是现在我找不到一个好方法来检测我需要的函数何时被实际加载 var doWhenLoaded = function (name) { if (typeof(eval(name)) === 'function') { eval(name+'()'); } else { s
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+'()')代码>抛出一个错误 我无法回答您的问题,但要测试某个函数是否可用,请使用:
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.
}
...
};
编辑
更新为使用窗口[name]
,但实际上应该使用对全局对象的引用。但我想,对于特定于浏览器的脚本,可以使用window
上面的代码不应该抛出任何错误。因为名称在形式参数中,所以它本质上是一个声明的局部变量。如果名称未定义,则typeof name
将返回字符串“undefined”,该字符串未通过测试,因此不会计算name() 我想我可以通过简单地编写文档而不是将脚本设置到dom中,来强制脚本在调用它们之前同步加载 好的。我不能让它工作。每当我调用doWhenLoaded时,如果名称未定义,我就会得到一个错误!我也无法让Chrome为错误提供行号:(我试图做的是不可能的吗?我正在bookmarklet创建的新窗口中加载脚本。如何在该窗口的“上下文”中运行我的测试检查功能?)?