如何在contentaccessible = yes时注入脚本失败

时间:2015-08-14 15:08:56

标签: firefox-addon

我必须在网页中收听jquery事件。我无法附加wrappedJSObject中的函数,因为它有执行在chrome范围内创建的函数的问题。

所以我想动态插入一个脚本,它将调度一个自定义事件,我将为我的插件监听。但这是一个简单的例子,只需插入提醒警告的脚本:

var aContentWindow = gBrowser.contentWindow;
var aContentDocument = aContentWindow.document;

var myScript = aContentDocument.createElement('script');
myScript.textContent = 'alert("registered");'

aContentDocument.documentElement.appendChild(myScript);

因此我尝试运行此网站的是Twitter,它适用于其他网站。

所以我认为让我们从具有contentaccessible=true的chrome路径的插件范围执行此操作,所以我这样做了,但它仍然会给我错误:

  

内容安全政策:该网页的设置阻止了自行加载资源(" script-src' unsafe-inline'' nonce-hnhqgKrLIxRgkHGdVqfgfA ==& #39;' unsafe-eval' https://twitter.com https://*.twimg.com https://twitter.com https://ton.twitter.com https://platform.twitter.com https://syndication.twitter.com {{3 }} https://analytics.twitter.com https://www.google-analytics.com https://ssl.google-analytics.com https://connect.facebook.net https://cm.g.doubleclick.net https://api.twitter.com https://graph.facebook.com")。 twitter.com:562:0

和第二个同时:

  

内容安全政策:该网页的设置阻止了自行加载资源(" script-src' unsafe-inline'' nonce-hnhqgKrLIxRgkHGdVqfgfA ==& #39;' unsafe-eval' https://www.google.com https://*.twimg.com https://twitter.com https://twitter.com https://ton.twitter.com https://platform.twitter.com {{3 }} https://syndication.twitter.com https://analytics.twitter.com https://www.google-analytics.com https://ssl.google-analytics.com https://connect.facebook.net https://cm.g.doubleclick.net https://api.twitter.com")。

有关如何在此处获取此脚本的任何想法吗?

1 个答案:

答案 0 :(得分:1)

您是否尝试过使用wrappedJSObject作为目标上下文的subscript loader,而不是操纵DOM?

您可以尝试的另一件事是创建a sandbox,将目标窗口指定为sandboxPrototype,将wantXrays设置为false并使用目标窗口document.domain作为foreach (array('Firefox', 'Chrome', 'Opera', 'BlackBerry', 'Internet Explorer') as $browser) { $rows = array_filter($data, function($item) use ($browser) { return strpos($item[0], $browser) === 0; }); $pageViews = array_sum(array_map(function($item) { return $item[1]; }, $rows)); // obviously you can create an array here too echo "$browser page views: $pageViews".PHP_EOL; } 安全负责人。

这应该为您提供一个对目标窗口具有完全访问权限的沙箱,该窗口不会引发任何安全错误,因为它将使用transparent wrappers

拥有该沙箱后,您可以尝试通过evalInSandbox在沙箱中运行脚本,或使用带沙箱的下标加载器作为目标,而不是窗口。