#cookies #microsoft-edge #session-storage
Вопрос:
Я сделал расширение Edge, задача которого состоит в том, чтобы перенаправить страницу на другой сайт в частности на определенных сайтах, и когда пользователь нажимает кнопку, этот второй сайт перенаправляется обратно на источник. Это расширение работает в локальной сети, но с небольшой ошибкой. Два сайта постоянно перенаправляются друг на друга. Где-то я читал, что Edge удаляет хранилище сеансов и локальное хранилище в случае перенаправления в локальной сети, поэтому я попробовал cookie, но без особого успеха. Что ж, я прошу помощи в этом деле.
//background.js const apps = [ ['AAA', 'aaa.intra.abc.xx'] ]; chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) { chrome.tabs.query({active: true, currentWindow: true}, function(tabs) { const url = tabs[0].url; const domain = (new URL(url)).hostname.replace('www.','').toLowerCase(); try { chrome.cookies.get({ 'url': tabs[0].url, 'name': domain }, function(data){ if (!data) { const i = apps.findIndex(u =gt; domain.includes(u[1])); if (i gt; -1) { chrome.cookies.set({ url: tabs[0].url, name: domain, value: apps[i][0] }); chrome.tabs.update( tabs[0].id, { url: `http://popup.intra.abc.xx?title=${apps[i][0]}`} ); } } } ); } catch (e) { alert("Error: " e); } }); });
решение
манифест.json
{ "manifest_version": 2, "name": "PopUp", "version": "1.0", "background": { "scripts": ["background.js"] }, "permissions": ["webRequest", "webRequestBlocking", "cookies", "lt;all_urlsgt;"] }
background.js
const apps = [ ['AAA', 'aaa.intra.abc.xx'] ]; function logURL(requestDetails) { const domain = (new URL(requestDetails.url)).hostname.replace('www.','').toLowerCase(); chrome.cookies.get({ 'url': requestDetails.url, 'name': 'status' }, function(data){ if (data === null) { const i = apps.findIndex(u =gt; domain.includes(u[1])); if (i gt; -1) { chrome.cookies.set({ url: requestDetails.url, name: "status", value: "opened" }); const url = 'http://popup.intra.abc.xx/?title=' apps[i][0]; chrome.tabs.update( requestDetails.tabId, { url: url} ); } } } ); } chrome.webRequest.onBeforeRequest.addListener( logURL, {urls: ["https://...", "http://.../*", "http://.../*"]}, ["blocking"] );
Мне пришлось поиграть с местом URL-адресов, потому что они должны были иметь лучшее место в массиве разрешений manifest.json, но в случае некоторых URL-адресов это снова вызвало эффект пинг-понга. Поэтому они остались в массиве URL-адресов onBeforeRequest.
Комментарии:
1. Есть ли какие-либо сообщения об ошибках в консоли расширения? Если возможно, можете ли вы опубликовать пример, который воспроизводит проблему, например, включая manifest.js. Я думаю, что это поможет решить проблему.
2. Спасибо тебе, Сюдун, за помощь.
Ответ №1:
манифест.json
{ "manifest_version": 2, "name": "PopUp", "version": "1.0", "background": { "scripts": ["background.js"] }, "permissions": ["webRequest", "webRequestBlocking", "cookies", "lt;all_urlsgt;"] }
background.js
const apps = [ ['AAA', 'aaa.intra.abc.xx'] ]; function logURL(requestDetails) { const domain = (new URL(requestDetails.url)).hostname.replace('www.','').toLowerCase(); chrome.cookies.get({ 'url': requestDetails.url, 'name': 'status' }, function(data){ if (data === null) { const i = apps.findIndex(u =gt; domain.includes(u[1])); if (i gt; -1) { chrome.cookies.set({ url: requestDetails.url, name: "status", value: "opened" }); const url = 'http://popup.intra.abc.xx/?title=' apps[i][0]; chrome.tabs.update( requestDetails.tabId, { url: url} ); } } } ); } chrome.webRequest.onBeforeRequest.addListener( logURL, {urls: ["https://...", "http://.../*", "http://.../*"]}, ["blocking"] );
Мне пришлось поиграть с местом URL-адресов, потому что они должны были иметь лучшее место в массиве разрешений manifest.json, но в случае некоторых URL-адресов это снова вызвало эффект пинг-понга. Поэтому они остались в массиве URL-адресов onBeforeRequest.