При использовании пользовательских протоколов или схем URL-адресов метод window.open () открывает пустую страницу в Google Chrome. - PullRequest
3 голосов
/ 21 июня 2019

Когда я использую window.open(url,'_blank') в действующей схеме URL https, браузер открывает новую вкладку с URL-адресом.

Например, выполните в консоли браузера Chrome следующее:

window.open('https://google.com','_blank')

Это откроет вкладку или окно (в зависимости от настроек браузера) и откроет google.com.

Однако, если я использую собственный протокол или схему URL следующим образом:

window.open('tryme://helloworld/XXX/VGhpcyBpcyBhIHRlc3QgdXJs==','_blank')

Chrome Console Затем пустая вкладка с "about: blank" открыто.Такое поведение, кажется, происходит только для Chrome, Mozilla, кажется, работает для обеих схем URL.

Есть ли какие-либо проблемы с Chrome или это так?

1 Ответ

1 голос
/ 24 июня 2019

Мне пришлось удалить свой предыдущий ответ, предлагая использовать объявление переменной при открытии ссылки, что приведет к появлению нового окна, содержащего URL-адрес в адресной строке, но фактически не получающего к нему доступа.

Я бы предложил, чтобы этоявляется функцией безопасности Google Chrome, отказывающейся в доступе к протоколам, отличным от http, https, ftp и file

К сожалению, я не смог найти это в официальной документации, однако вы обнаружите, что с помощью URL () для созданияместоположение, вы получите ожидаемый результат

let newLocation = new URL('tryme://helloworld/XXX/VGhpcyBpcyBhIHRlc3QgdXJs==')

возвращение

{
  ...
  protocol: "tryme:"
  pathname: "//mytest.com"
  ...
}

Однако Google Chrome откажется обновить

window.location = newLocation

было бы неплохо, если бы он вернулсообщение об ошибке, но не делает этого.Вы также обнаружите, что использование нового URL () будет работать для поддерживаемых протоколов.

Надеюсь, это поможет.Я обновлю этот ответ, если я найду убедительные доказательства в официальной документации, но я почти уверен, что подход с высоким уровнем безопасности Google для Chrome является причиной невозможности этого

...