你可以试试...
function evalMe(code){
var script = document.createElement('script');
script.innerText = code;
document.querySelector('head').appendChild(script);
}
这应该会产生相同的效果,除非他们也禁用了它,但据我所知,这很好。当然,如果脚本errors
你不会听到它,除非你对 to 进行一些包装string
,eval
例如
function myHandler(err){
// handle errors.
}
function evalMe(code){
var script = document.createElement('script');
var wrapper = '(function(){ try{ @@ }catch(err){ myHandler(err); } })()';
// Make sure the string has an ending semicolon
code = code[code.length-1] === ';' ? code : code + ';';
script.innerText = wrapper.replace('@@', code);
document.querySelector('head').appendChild(script);
}
或者,您可以使用官方机制
http://developer.chrome.com/beta/extensions/tabs.html#method-executeScript
但是,这将要求您有一个背景页面并在您的页面和背景页面之间使用消息传递。app
更新:工作方法
您可以eval
使用 iframe 和base64
处理dataURI
扩展页面和<iframe>
. 您可以在 github 上获取代码的工作副本。要使用简单的克隆或下载 repo,并dir
在 chrome 扩展管理器中将“客户端”安装为未打包的扩展。驱动插件的代码位于app.js
使用 iframeEval 进行测试,错误通知有点错误,但嘿,eval
工作正常。
@appsillers 为了让您的插件在没有任何额外代码的情况下工作,您可以使用代码中的eval
方法覆盖扩展window
上的iframeEval
方法。