Существует расширение для Chrome, которое называется Requestly, и оно позволяет вам перенаправить адрес на один из ваших вариантов. Я протестировал правила 'Redirect Request', и он взял URL-адрес javascript и перенаправил его на один из моих общедоступных серверов. Как я могу имитировать (или воссоздать), как «Requestly» делает это с JavaScript?

Я пытался перенаправить, используя window.location.replace и window.location.href, но это просто перенаправляет всю мою страницу в исходный код javascript.

1
Jacob 19 Авг 2019 в 03:12

2 ответа

Лучший ответ

Краткий ответ: ВЫ НЕ МОЖЕТЕ ПРЕКРАТИТЬ запросы JS / CSS от JS CODE и выполнять перенаправление .

Я думаю, что вы хотите добиться возможности перенаправления в вашем коде JS. В Requestly мы делаем несколько вещей, чтобы обеспечить функциональность перенаправления.

Короче говоря, если вам нужна возможность перенаправления, вам нужно больше возможностей, чем просто JS API, вам нужны Chrome Extension API

Вы можете легко найти простой пример настройки Redirect в документации по Chrome WebRequest API.

Отказ от ответственности : Сачин, основатель @ Requestly

1
sachinjain024 20 Авг 2019 в 11:12

Вот супер базовый пример того, как вы могли бы сделать это. По сути, разрешите некоторый настраиваемый список перенаправлений, а затем, как только страница загрузится, вы можете узнать, каково текущее местоположение window.location.href (в данном случае iframe.src) и если этот URL-адрес находится в вашем перенаправить список, перенаправить страницу.

Мне пришлось использовать iFrame, чтобы продемонстрировать это, так что, очевидно, есть слой перевода в то, что вы используете / делаете здесь.

Введите адрес https://youtube.com/ в адресную строку (текстовое поле), и вы увидите, как может работать базовый подход.

const redirectMaps = [
	{
  	from: 'https://youtube.com/',
    to: 'https://youtube.com/embed/dQw4w9WgXcQ'
  }
];

const address = document.getElementById('address');
const iframe = document.getElementById('myFrame');
address.addEventListener('change', () => {
	const url = address.value;
  iframe.setAttribute('src', url);
});

iframe.onload = (e) => {
	console.log('src', iframe.src);
	if (iframe.src) {
  	const match = redirectMaps.find( src => src.from === iframe.src);
    if (match) {
    	window.location.href = match.to;
    }
  }
}
#container {
  display: grid;
  grid-template-rows: auto 1fr;
}

iframe {
  height: 500px;
  width: 100%;
}
<div id="container">
  <input id="address" />
  <iframe id="myFrame"></iframe>
</div>

Лучше работает в JSFiddle.

JSFiddle: https://jsfiddle.net/

1
mwilson 19 Авг 2019 в 00:42