Firefox addon &引用;“评估”;由CSP使用页面上的mod';s内容脚本

Firefox addon &引用;“评估”;由CSP使用页面上的mod';s内容脚本,firefox-addon,eval,firefox-addon-sdk,content-security-policy,Firefox Addon,Eval,Firefox Addon Sdk,Content Security Policy,我正在尝试创建一个与github交互的扩展。 我需要在我的代码中使用“eval”,但我一直被页面CSP阻止。 这是我的代码的简化版本: const pageMod = require("sdk/page-mod").PageMod; var contentScript = 'try {eval("console.log(\'hello from eval\')");} catch (e) {console.log("page mode " + e.message);}'; pageMod({

我正在尝试创建一个与github交互的扩展。 我需要在我的代码中使用“eval”,但我一直被页面CSP阻止。 这是我的代码的简化版本:

const pageMod = require("sdk/page-mod").PageMod;

var contentScript = 'try {eval("console.log(\'hello from eval\')");} catch (e) {console.log("page mode " + e.message);}';

pageMod({
    include: "*",
    contentScript: contentScript ,
    contentScriptWhen: "start"
});

有人能帮我解决这个问题吗?

这是因为内容安全策略:

通常99%的情况下,
eval
的用法可以用其他东西代替。如果您给出了上下文(为什么需要评估),我们可以尝试提出一个替代方案。 这是最简单的方法

困难的方法是拦截来自github的响应,使用删除该头,这里有一个,但您可能有一个简化版本


就我个人而言,我会尽量避免使用eval,这通常更容易。

当我打开google.ca时,你的代码对我很有用。您到底收到了什么错误?im收到的消息是“对eval()的页面模式调用被CSP阻止”。去google.com也对我有用。当我去感谢你的回答时,这个问题就会出现。虽然我同意使用eval通常被认为是“邪恶的”,但在我的附加设计中,我不得不使用它。我查看了PageMode模块的SDK实现,据我所知,它使用Components.utils.Sandbox和Components.utils.evalInSandbox在页面上运行contentScript。如果代码是从页面“沙盒”形成的,那么我看不出有任何理由被页面的CSP阻止。在Chrome上(它也可以“沙盒”页面中的内容脚本),我使用eval没有问题。请你解释一下为什么“沙盒”代码会受到影响?关于Google Chrome,我不知道是否以及如何实现CSP,所以我无法回答。关于Firefox上的插件,答案很简单:内容脚本的执行权限与主机页相同,低于在浏览器环境(chrome,因此也包括系统主体)中运行的插件代码。我并不是说
eval
被认为是“邪恶的”,我只是说,做得更好,或者做得不同,你可能会得到同样的结果。但是在不知道你想要实现什么的情况下,我们不能向你推荐任何好的替代方案,除了我给出的那个。