2014-02-05 40 views
0

我正在开发一个DOM内容提取工具。所以我使用客户端脚本实现了一个简单的扩展扩展,允许使用click来选择所需的元素并将其提取出来。如何使用chrome.contentSettings API禁止脚本,同时允许扩展内容脚本

我希望使用这些数据(例如元素的路径)进行批处理工作,该工作假设易于与wget和其他工具一起使用。但问题是。因为我用来拾取元素的网页被脚本所改变,所以路径结果是错误的,因为wget不会执行脚本。

为了解决这个问题,我尝试使用chrome.contentSettings API来阻止javascript,但意外的是,它也阻止了内容脚本(至少是事件处理部分,因为我的代码的其他部分被执行)。有没有办法解决这个问题,比如使用例外规则或者使用其他方法来阻止网页上的脚本?

以下是用于在目标主机上禁止javascript的后台脚本。

var contentSettings = chrome.contentSettings; 

contentSettings.javascript.clear({}, function() { 

contentSettings.javascript.set({ 
    primaryPattern: '*://*.example.com/*', 
    setting: 'block' 
}); 

}); 

在此先感谢。

回答

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']); 
相关问题