我必须在网页中收听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")。
有关如何在此处获取此脚本的任何想法吗?
答案 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在沙箱中运行脚本,或使用带沙箱的下标加载器作为目标,而不是窗口。