Установить location.href на новой вкладке _blank, асинхронно не работающей в MS Edge - PullRequest
0 голосов
/ 13 января 2020

Я хочу открыть новую вкладку, используя _authTab = window.open('', '_blank'); набор, это URL-адрес асинхронно, например setTimeout(() => _authTab!.location.href = 'https://stackoverflow.com/', 2000);. На chrome все работает нормально: открывается пустая страница и через 2 секунды загружается https://stackoverflow.com/.

Ms Edge выдает ошибку, в результате чего новая вкладка остается _blank

[object Error]: {description: "Permission denied", message: "Permission denied", nr@seenError: true, number: -2146828218, stack: "Error: Permission denied at Anonymous function (https://52f62d4b.ngrok.io/:149596:15) at nrWrapper (Unknown script code:1:16969)"}
description: "Permission denied"
message: "Permission denied"
nr@seenError: true
number: -2146828218
stack: "Error: Permission denied at Anonymous function (https://52f62d4b.ngrok.io/:149596:15) at nrWrapper (Unknown script code:1:16969)"

__proto__: Error

РЕДАКТИРОВАТЬ Веб-страница используется внутри iframe

  <iframe 
      allow="accelerometer *; ambient-light-sensor *; autoplay *; camera *; encrypted-media *; fullscreen *; geolocation *; gyroscope *; magnetometer *; microphone *; midi *; payment *; picture-in-picture *; speaker *; usb *; vibrate *; vr *"
      sandbox="allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts" 
      src="....">
  </iframe>

Ответы [ 2 ]

1 голос
/ 14 января 2020

URL-адрес может быть установлен на новой открытой странице в Edge, если мы удалим атрибуты sandbox.

A. html

<iframe allow="accelerometer *; ambient-light-sensor *; autoplay *; camera *; encrypted-media *; fullscreen *; geolocation *; gyroscope *; magnetometer *; microphone *; midi *; payment *; picture-in-picture *; speaker *; usb *; vibrate *; vr *"
        src="B.html">
</iframe>

B. html

<input type="button" value="test" onclick="opennew()" />
<script>
    function opennew() {
        var _authTab = window.open('', '_blank');
        setTimeout(() => _authTab.location.href = 'https://stackoverflow.com/', 2000);
    }
</script>

Из do c мы видим, что многие значения sandbox не поддерживаются Edge. Так что это может быть причиной того, что URL нельзя установить на Edge, когда мы используем iframe с атрибутом sandbox.

1 голос
/ 13 января 2020

Edge, вероятно, считает, что '' url в window.open('', '_blank') находится в другом домене. Ссылка: Политика WHATWG с тем же происхождением
Попробуйте открыть пустую страницу.

...