1

Google Scholar Endnote ファイルを引用形式に変換する 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}と、ユーザーは「このページは拡張機能によってブロックされました」という一般的な chrome ページにリダイレクトされます。

これを回避する方法についてのアイデアはありますか?

4

1 に答える 1

0

リンクをたどるプロセスは次のようになります。

  1. ユーザーがリンク上でクリック (またはキーを押す) アクションを実行する
  2. そのイベントに対してイベント ハンドラー コードが実行されます
  3. クリックが成功し、ブラウザーがリソースの HTTP 要求を実行します。
    • onBeforeRequestリスナーが実行されます
    • 他のwebRequestリスナーが実行されるなど。

ステップ 2 でクリック イベントを停止しようとしていますが、webRequestコードはステップ 3 まで実行されません。webRequestコードが実行されているという事実は、何らかのリンク アクティベーション イベント (clickまたはkeypress) が既に成功していることを意味します。

コンテンツ スクリプトをページに挿入して、停止したいリンクにイベント キャンセル リスナーを直接追加する必要があります (たとえば、return falseまたはを使用preventDefault)。

于 2013-05-16T18:42:31.390 に答える