Google Chrome扩展程序webrequest拦截

时间:2013-05-16 16:04:33

标签: javascript google-chrome-extension

我正在尝试创建一个Chrome扩展程序,将google scholar endnote文件转换为引文格式。

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"]
);

问题:

我必须重定向到数据网址。我希望点击操作取消

返回{cancel : true}会导致用户被重定向到“此页面被加密的通用Chrome页面阻止”

关于如何解决这个问题的任何想法?

1 个答案:

答案 0 :(得分:0)

关注链接的过程如下:

  1. 用户在链接上执行点击(或按键)操作
  2. 为该事件运行事件处理程序代码
  3. 点击成功,浏览器会对资源发出HTTP请求
    • onBeforeRequest侦听器运行
    • 其他webRequest听众运行等
  4. 您尝试在步骤2中停止点击事件,但是您的webRequest代码直到第3步才会运行。您的webRequest代码正在运行的事实意味着某些代码链接激活事件(clickkeypress)已经成功。

    您需要在页面中插入内容脚本,以便将取消事件的侦听器直接添加到您要停止的链接中(例如,使用return falsepreventDefault)。