2013-05-16 126 views
1

我想創建一個Chrome擴展,將谷歌學者endnote文件轉換爲引文格式。谷歌Chrome擴展webrequest攔截

chrome.webRequest.onBeforeRequest.addListener(function(reqObj){ 
    if (reqObj.tabId != -1){ 
     var xhr = new XMLHttpRequest(); 
     xhr.open("GET", reqObj.url, true); 
     xhr.onreadystatechange = function(){ 
      if(xhr.readyState == 4){ 
       parseEndnote(xhr.responseText); //Parse the endnote and create the citation 
      } 
     } 
     xhr.send(); 
     return {redirectUrl : "data:text/plain;charset=utf-8,Citation%20Created"} 
    } 
}, 
{urls : ["*://*/scholar.enw*"]}, 
["blocking"] 
); 

問題:

我重定向到一個傳輸數據的URL。我寧願點擊動作爲取消

返回{cancel : true}導致用戶被重定向到「此頁-被阻斷逐的擴展通用鉻頁」

任何想法,如何解決這一個?

+0

任何你不能在綁定到你想要停止的相關鏈接的事件監聽器中注入一個內容腳本和'return false'(或'e.preventDefault()')的原因? – apsillers

+0

@apsillers可能就是這樣。我只是希望沒有消息傳遞的一些簡單的全局代碼就足夠了。我接受進一步的建議,儘管...謝謝 –

回答

0

以下鏈接的過程是這樣的:

  1. 用戶進行點擊(或按鍵)的鏈接該事件的行動
  2. 事件處理程序代碼運行
  3. 的點擊是成功的,和瀏覽器承擔的資源的HTTP請求
    • onBeforeRequest聽衆運行
    • 其他webRequest聽衆運行等

你試圖在步驟2中停止點擊事件,但您webRequest代碼不直到第3步張女士運行您的webRequest代碼在所有運行方式某些鏈接激活事件(clickkeypress)已成功。

您需要在頁面中注入一個內容腳本,以將事件取消偵聽器直接添加到要停止的鏈接(例如,使用return falsepreventDefault)。

+0

謝謝,這是我的第一個Chrome擴展(一個業餘愛好項目)。我已經注入了一個內容腳本 –