2013-05-16 129 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扩展(一个业余爱好项目)。我已经注入了一个内容脚本 –