2011-06-07 36 views
12

我不知道是否有某種方式做這樣的事情: 如果在特定網站上的IM,我想,一些JavaScript文件直接從我的電腦裝( fe file:/// c:/test.js),而不是來自服務器。Chrome擴展,響應代碼替換HTML之前,瀏覽器顯示它

對於我在想,如果有可能,使可能在其瀏覽器中顯示它之前的權利得到響應更改HTML代碼的擴展。所以整個過程應該是這樣的:

  1. 請求時
  2. 瀏覽器會從服務器響應
  3. #response改變# - 這是一部分,當擴展進來
  4. 瀏覽器解析改變的反應和顯示包含該新響應的頁面。

它甚至不必須是一個Chrome擴展反正。它應該只是做上面描述的工作。它可以阻止原始文件併爲另一個(DNS/proxy?)服務,或者在我的計算機中過濾整個HTTP流量,並將特定的代碼替換爲另一個匹配的響應。

回答

4

您可以使用WebRequest API來實現。例如,您可以添加一個onBeforeRequest監聽器,並重定向一些要求:

chrome.webRequest.onBeforeRequest.addListener(function(details) 
{ 
    var responseData = "<div>Some text</div>" 
    return {redirectUrl: "data:text/html," + encodeURIComponent(responseData)}; 
}, {urls: ["https://www.google.com/"]}, ["blocking"]); 

這將顯示文本「一些文本」,而不是谷歌主頁的<div>元素。請注意,您只能重定向到允許Web服務器本身重定向到的URL。這意味着重定向到file:///網址是不可能的,並且您只能重定向到您的擴展中的文件,如果這些文件是web accessibledata:http:但是,網址可以正常使用。

1

在Windows中,您可以使用Proxomitron(proxomitron.info),它是一個本地代理,可以攔截正在加載到瀏覽器中的任何頁面或文件,並使用正則表達式進行更改(無需DOM解析)由瀏覽器呈現。