Итак, мое приложение просто открывает новое окно локального html-файла с тегом webview некоторой веб-страницы. Но когда я пытался получить файлы cookie, я ничего не могу получить. Я считаю, что причина в том, что cookie ограничена URL-адресом тега webview, но теперь мой локальный файл, но когда я могу получить только окно локального файла. Я решаю эту проблему?Как я могу получить и установить куки в теге webview nwjs?
ответ
это может быть поздно, но я буду ответить на этот вопрос для будущих посетителей: P
Я думаю, что лучше и прямой путь, чтобы установить и получить печенье без каких-либо обходных путей заключается в использовании WebView запрос перехватчики и изменить запрос и ответ заголовки это более безопасным и надежным, и будет работать в nodewebkit, электронных и хрома расширений и приложений:
Итак, чтобы установить заголовки можно использовать onBeforeSendHeaders
, , например позволяет сказать, что вы хотите изменить печенье под названием «connect.sid» который используется как идентификатор сеанса в expressjs, вы можете сделать следующее:
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.set
и chrome.cookies.get
, я нашел все эти вещи в хромовом исходном коде;)