1

我正在尝试创建一个 chrome 扩展,它将谷歌学者尾注文件转换为引文格式。

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}结果导致用户被重定向到“This-page-was-blocked-by-an-extension generic chrome page”

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

4

1 回答 1

0

跟随链接的过程是这样的:

  1. 用户对链接执行点击(或按键)操作
  2. 事件处理程序代码为该事件运行
  3. 点击成功,浏览器对该资源进行HTTP请求
    • 听众onBeforeRequest
    • 其他webRequest听众运行,等等。

您试图在第 2 步中停止单击事件,但您的webRequest代码直到第 3 步才运行。您的webRequest代码正在运行这一事实意味着某些链接激活事件(clickkeypress)已经成功。

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

于 2013-05-16T18:42:31.390 回答