0

Webリクエストを特定のURLに傍受しようとしています。リクエストを送信する前にWeb拡張機能のネイティブメッセージング(非同期) 。ネイティブメッセージングは​​非同期であるため、ネイティブメッセージングの応答からCookie値が取得される前にWeb要求が送信されます。Web Extensionはネイティブメッセージングに連絡してリクエストクッキーの値を設定するようにWebリクエストを尋ねます

ここにコードスニペットがあります。このフローを同期させて、Cookieがロードされ、インターセプトされたWebリクエストが送信されるようにする方法。クッキーヘッダを設定するために

browser.webRequest.onBeforeRequest.addListener(
    loadCookie, 
    {urls: ["https://some-url/*"]}, 
    ["blocking"] 
); 

function loadCookie(requestDetails) 
{ 
    console.log("Gettting Cookie Data for"+requestDetails.url); 
    var sending = browser.runtime.sendNativeMessage("native_app","getCookieData"); 
    sending.then(onSuccess, onError); 
} 

function onSuccess(response) 
{ 
    console.log("Received: " + JSON.stringify(response)); 
    setCookie(response); 
} 

function onError(error) 
{ 
    console.log("Error"); 
} 

function setCookie(resp) 
{ 
    if(typeof resp != 'undefined'){ 
    var now = new Date(); 
    var time = Math.round(now.getTime()/1000); 
    var expireTime = time + 15*60; 
    browser.cookies.set({ 
    url: "https://some-domain/*", 
    name: "req_cookie", 
    value: resp, 
    secure: true, 
    expirationDate: expireTime 
    }); 
    } 
    console.log("Set a cookie"); 
} 
+1

あなたが傍受したいURLがページ上のリンクである場合は、マウスオーバーイベントリスナーのデータのプリフェッチを開始して、リンクがクリックされる前に準備が整うようにすることができます。 – wOxxOm

+0

私はハイパーリンクのためにそれを行うことができますが、私はユーザーがアドレスバーにURLを入力することによって起こる通常の要求のためにそれを行う必要があります。 –

答えて

0

、私はあなたがonBeforeSendHeaders、ないonBeforeRequestに耳を傾ける必要があると思います。

onBeforeSendHeaders(およびonBeforeRequest)のドキュメントは言う:以降のFirefox 52から

、代わりにBlockingResponseを返すので、リスナーはBlockingResponseで解決された約束を返すことができます。これにより、リスナーは要求を非同期に処理できます。

+0

onBeforeSendHeadersを使用しても、ネイティブメッセージング呼び出しとリスナー機能はまだ非同期です。私は、クッキー値を受け取った後にのみリスナーを返す必要があります。解決/拒否の約束を待ってから復帰するようなもの。 –

+0

いいえ、上記の見積もりをお読みください。あなたはFF 52+であれば、リスナーから約束**を返すことができます。約束が最終的に解決されるBlockingResponseは、直接返されたBlockingResponseと同じ方法で配信されます。 –

関連する問題