2014-02-05 45 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']); 
相關問題