2016-04-04 13 views
1

Dolayısıyla, uygulamam bazı web sayfasının web görüntüleme etiketiyle yerel bir html dosyasının yeni bir penceresini açıyor. Ama ben kurabiyeleri almaya çalıştığında, bir şey alamıyorum. Bunun sebebi, çerezin webview etiketinin URL'siyle sınırlı olduğunu ancak şimdi yerel dosyamın ancak yerel dosyanın penceresini alabildiğinin nedenini düşünüyorum. Bu sorunu çözdüm mü?nwjs'nin webview etiketinin içinde çerezleri nasıl alabilirim?

cevap

2

geç olabilir ama gelecek ziyaretçiler için bu cevap verecektir: P

Ben geçici çözümler olmadan ayarlamak ve kurabiye almak için en iyi ve doğrudan yolu düşünmek olduğunu Webview istek önleyicilerin kullanıp isteği ve yanıtını değiştirme başlıkları bu daha güvenli ve güvenilir olup nodewebkit, elektron ve krom uzantıları ve uygulamalarda çalışır: Eğer "connect.sid" adında bir çerez değiştirmek istiyorum Diyelim örneğin onBeforeSendHeaders, kullanabilirsiniz başlıklarını ayarlamak için Yani

expressjs oturum kimliği olarak kullanılan aşağıdakileri yapabilirsiniz:

Ayrıca ayarlayabilirsiniz ve bu yöntemi kullanarak ana pencere için çerez elde ancak bunun yerine webview.request yakalanabilmesini sen chrome.webRequest ya da sadece kullanmak müdahale edebilir:
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"); 

ve başlıklarını okumak için sen 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"); 

Not kullanabilirsiniz chrome.cookies.set ve chrome.cookies.get, tüm bunları krom kaynak kodunda buldum;)

İlgili konular