我正在开发一个用于DOM内容提取的工具。所以我使用客户端脚本实现了一个简单的chrome扩展,允许使用click来选择所需的元素并将其解压缩。
我想使用这些数据(例如元素的路径)进行批处理工作,这可以很容易地与wget和其他工具一起使用。但问题是。因为我用来选择元素的网页被脚本更改,所以路径结果是错误的,因为wget不会执行脚本。
为了解决这个问题,我尝试使用chrome.contentSettings API阻止javascript,但是意外地,它也阻止了内容脚本(至少是事件处理部分,因为我的代码的其他部分被执行)。有没有办法解决这个问题,比如使用例外规则或使用其他一些方法来阻止网页上的脚本?
以下是用于禁止目标主机上的javascript的后台脚本。
var contentSettings = chrome.contentSettings;
contentSettings.javascript.clear({}, function() {
contentSettings.javascript.set({
primaryPattern: '*://*.example.com/*',
setting: 'block'
});
});
提前致谢。
答案 0 :(得分:0)
事实证明,chrome.contentSettings
API无法满足此需求。
相反,使用chrome.webRequest
API可以轻松解决此问题,但它有其他限制,例如无法阻止网页中的内联脚本。
这是可以解决问题的后台脚本。
var matches = chrome.runtime.getManifest().content_scripts[0].matches;
var pattern = new RegExp('^https?:\\/\\/(\\w+\\.)?(' +
matches.map(function(pattern) {
return RegExp.escape(pattern.substring(6, pattern.length - 2));
}).join('|') + ')\\/', 'i');
chrome.webRequest.onBeforeSendHeaders.addListener(function(details) {
return {
cancel: details.requestHeaders.some(function(header) {
if (header.name == 'Referer' && pattern.test(header.value))
return true;
})
};
}, {
urls: ['<all_urls>'],
types: ['script']
}, ['blocking', 'requestHeaders']);