Перенаправление в расширении Edge

#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.