0

这就是我到目前为止所得到的

function onReady(callback) {
    if (document.readyState === "complete") window.setTimeout(callback, 0);
    else window.addEventListener("load", callback, false);
}
onReady(function() {
    removeit("new");
});

function removeit() {
    el = document.querySelector("#toolbarCurtain");
    if (el) {
        el.style.setProperty("display", "", null);
    } * * EXEC COMMAND
    return;
}

“ **EXEC COMMAND”是我要调用站点本身中的函数的地方。该函数称为drawPlayer(),当我在chrome控制台中键入drawPlayer()时,它可以工作。我不能让我的脚本调用该函数,我该怎么做?

4

1 回答 1

0

取自这里

所有注入的代码都在一个孤立的世界中运行,这是一个与主网站的 JS 上下文隔离的 javascript 上下文。这是一种内置的安全措施,无法禁用。

解决方案是附加一个脚本。如果您需要大量执行,通常应该设置一个自定义通信事件,并且只注入一个脚本来侦听该自定义事件并eval()获取事件数据。以下是 Google 建议的执行方式。

请记住,这仅在目标站点没有 CSP(内容安全策略)时才有效。

var RunInThisContext = function(c){ 
    var code = document.createTextNode(c);
    var script = document.createElement('script');
    script.type='text/javascript';
    script.appendChild(code);
    document.body.appendChild(script);      
}; 

像这样使用:

RunInThisContext('('+(function(){ 
     /////////////////////
     //
     //   RUN YOUR FUNCTIONS HERE
     //
     /////////////////////
}).toString()+'()); '); 
于 2012-07-12T13:21:02.563 回答