2016-04-04 15 views
1

私のアプリでは、一部のウェブページのwebviewタグを含むローカルのhtmlファイルの新しいウィンドウを開くだけです。しかし、私はクッキーを取得しようとすると、私は何も得ることができません。私は理由はクッキーがWebviewタグのURLにバインドされていると思うが、今私のローカルファイルが、私はローカルファイルのウィンドウを取得することができます。私はこの問題を解決する?nwjsのwebviewタグ内でクッキーを取得して設定するにはどうすればよいですか?

答えて

2

それが遅れるかもしれないが、私は将来の訪問者のためにこれを答える:私は最高の回避策なしでクッキーを設定および取得するための直接的な方法は、WebViewの要求インタセプタを使用して、要求と応答を変更することだと思うP

ヘッダこれは、より安全で信頼性が高く、nodewebkit、電子およびクロム拡張機能やアプリケーションで動作します:あなたは「connect.sid」と呼ばれるクッキーを変更したいと言うことができます例えばonBeforeSendHeaders、 を使用することができますヘッダーを設定するので、

あなたは次のことを行うことができます:

var new_sessionId = "s%randskbksbdfmnsdbf345k345h34k5"; 
var $webview = $("#my-webview"); 
$webview.get(0).request.onBeforeSendHeaders.addListener(
    function (details) { 
     details.requestHeaders.forEach(function (header) { 
      if (header.name === "Cookie") { 
       var cookies = header.value.split("; "); 
       var valid_cookies = cookies.filter(function (cookie) { 
        return cookie && cookie.indexOf("connect.sid") < 0; 
       }); 
       valid_cookies.push("connect.sid=" + new_sessionId); 
       header.value = valid_cookies.join("; "); 
      } 
     }); 
     return {requestHeaders: details.requestHeaders}; 
    }, 
    {urls: ["<all_urls>"]}, 
    ["blocking", "requestHeaders"] 
); 
$webview.attr("src","http://example.com"); 

し、使用することができますヘッダを読み込むためのonHeadersReceived

var $webview = $("#my-webview"); 
$webview.get(0).request.onHeadersReceived.addListener(function (details) { 
     details.responseHeaders.forEach(function (header) { 
      if (header.name === "set-cookie") { 
       var cookies = header.value.split("; "); 
       var sessionCookie = cookies.find(function (cookie) { 
        return cookie && cookie.indexOf("connect.sid") === 0; 
       }); 
       if (sessionCookie) { 
        var sessionId = sessionCookie.split("=")[1]; 
        console.log(sessionId); 
       } 
      } 
     }); 
    }, 
    {urls: ["<all_urls>"]}, 
    ["blocking", "responseHeaders"] 
); 
$webview.attr("src","http://example.com"); 

注:あなたも設定して、このメソッドを使用して、メインウィンドウのクッキーを取得する代わりにwebview.requestを遮断するあなたはchrome.webRequestを傍受か、単に使用することができますすることができますchrome.cookies.setchrome.cookies.get、これらはすべてクロムソースコードで見つかりました;)

関連する問題