Cookies 如何在nwjs的webview标签中获取和设置cookie?

Cookies 如何在nwjs的webview标签中获取和设置cookie?,cookies,nw.js,Cookies,Nw.js,因此,我的应用程序只需打开一个本地html文件的新窗口,其中包含某个网页的webview标记。但是当我试图获取cookie时,我什么也得不到。我想原因是cookie被绑定到webview标记的url,但现在是我的本地文件,但我只能获取本地文件的窗口。我如何解决这个问题 可能会很晚,但我会为未来的访客回答这个问题:p 我认为设置和获取cookie而无需任何解决方法的最佳直接方法是使用webview请求拦截器,并更改请求和响应头。这更安全可靠,适用于nodewebkit、electron和chrom

因此,我的应用程序只需打开一个本地html文件的新窗口,其中包含某个网页的webview标记。但是当我试图获取cookie时,我什么也得不到。我想原因是cookie被绑定到webview标记的url,但现在是我的本地文件,但我只能获取本地文件的窗口。我如何解决这个问题

可能会很晚,但我会为未来的访客回答这个问题:p

我认为设置和获取cookie而无需任何解决方法的最佳直接方法是使用webview请求拦截器,并更改请求和响应头。这更安全可靠,适用于nodewebkit、electron和chromium扩展和应用程序:

因此,要设置标题,可以使用
onBeforeSendHeaders
, 例如,假设您要更改一个名为“connect.sid”的cookie,该cookie在expressjs中用作会话id,您可以执行以下操作:

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");
注意:您也可以使用此方法设置并获取主窗口的Cookie,但不必拦截
webview.request
您可以拦截
chrome.webRequest
或只使用
chrome.cookies.set
chrome.cookies.get
,我在chrome源代码中找到了所有这些东西;)

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");