Почему Chrome (внутри Electron) может внезапно перенаправить на chrome-error://chromewebdata?

Мое электронное приложение случайным образом перенаправляет на chrome-error://chromewebdata, и я понятия не имею, почему. В консоли нет ошибок и т.д.

Когда приложение Electron запускается впервые, открывается окно, и оно перенаправляется из моего приложения на этот URL-адрес, и я вижу пустой пустой белый экран. Взаимодействие с пользователем не требуется, оно просто происходит при запуске приложения.

Если я открою devtools, я увижу, что window.location.href содержит chrome-error://chromewebdata вместо http://localhost:9080 (приложение Electron запускается с использованием URL-адреса локального хоста).

Я попытался удалить локальную папку данных Electron/Chrome в ~/Library/Application Support/my-app-name и начать заново, но безуспешно.

По каким причинам Chrome (в Electron?) может решить перенаправить на chrome-error://chromewebdata?

Это происходит без какого-либо взаимодействия с пользователем? Где именно вы видите URL-адрес, на который ссылаетесь?

snwflk 16.04.2019 21:34

@snwflk Да, никакого взаимодействия с пользователем, как только электронное приложение загружается и открывается окно, оно перенаправляется туда. Я вижу URL-адрес в window.location.href, когда проверяю, почему окно превратилось в пустой белый экран. Обновлен вопрос, чтобы описать эти детали.

trusktr 16.04.2019 22:09

URL-адрес ошибки указывает на недопустимый URL-адрес. Если вы переходите на несуществующий веб-сайт в Chrome, вы также получаете это значение для window.location.href. Есть ли момент, когда ваше приложение загружается/отображается правильно? Вы перемещаетесь где-нибудь в своем коде? Можете ли вы перейти к URL-адресу вашего локального хоста в браузере (то есть не в Electron)?

snwflk 16.04.2019 22:21

@snwflk На мгновение я вижу цвет фона моего приложения, так что он, по крайней мере, попал в CSS во время синтаксического анализа во время работы localhost:9080. И если я посещаю localhost:9080 в Chrome, я получаю Uncaught ReferenceError: require is not defined, что имеет смысл и указывает на то, что по крайней мере какой-то JS-код выполняется в Electron, где определено require. Если я вернусь к localhost:9080 с помощью location.replace, я снова увижу фон приложения, а затем через короткое время он перенаправит обратно на chrome-error://chromewebdata. Хммм...

trusktr 16.04.2019 22:27

@snwflk У вас есть пример кода, который заставит Chrome / Electron перейти по этому URL-адресу?

trusktr 16.04.2019 22:39

Можете ли вы проверить вывод на вкладке «Сеть» в DevTools? Обязательно установите флажок «Сохранить журнал». Старайтесь наблюдать за поведением с самого начала. Может быть, есть указание на то, что происходит.

snwflk 16.04.2019 22:44

@snwflk Интересно, спасибо за подсказку. Я нашел "неудачное" соединение. Прямо перед переходом к этому URL-адресу chrome-error на вкладке сети отображается net::ERR_CONNECTION_REFUSED в подсказке при наведении курсора на неудавшийся URL-адрес. Но нет намека, почему. Затем я вставил неудачный URL-адрес в Chrome и обнаружил, что он перенаправляет на localhost:5000, которого нет на моем компьютере. Но Chrome показывает полезное сообщение в середине представления, а также сохраняет localhost:5000 в адресной строке, что делает его очевидным, и не перенаправляет на страницу chrome-error, как это происходит в Electron. Спасибо!

trusktr 16.04.2019 23:13
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
10
7
19 382
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

По какой-то причине ваш код пытается перейти к недопустимому (несуществующему) URL-адресу, в результате чего window.location.href становится chrome-error://chromewebdata.

Повторюсь: прямого перенаправления на chrome-error://chromewebdata нет, вместо этого используется URL-адрес, который не существует или недоступен.

Проверьте, не вызывает ли ваш код эту навигацию (возможно, перенаправление). Очень полезно проверить вкладку «Сеть» в DevTools, убедившись, что установлен флажок «Сохранить журнал». Это должно дать некоторое представление о том, что именно происходит.

что мне делать, если мне нужно обработать глубокую ссылку из окна браузера?

Freddy Daniel 28.11.2019 06:01

Как обрабатывать мертвые ссылки в Electron? Я думаю, что это другой вопрос, требующий нового вопроса SO.

snwflk 28.11.2019 13:34

Я нашел способ справиться с этим через registerFileProtocol. Я свяжу ответ здесь позже :)

Freddy Daniel 02.12.2019 06:38

Это происходит для меня в моем проекте Electron на основе Угловой. В моем случае проблема в том, что сервер Angular Webpack не готов принимать запросы, когда я впервые запускаю проект. Это происходит только при запуске, и простая перезагрузка может обойти это — любые живые изменения в коде Angular обновят страницу без каких-либо проблем.

Это не проблема в продакшене, так как я переключаюсь на загрузку статических файлов в своих релизах.

Чтобы сделать это немного менее раздражающим, я добавил задержку к запуску электрона:

"start": "concurrently -k \"ng serve\" \"npm run delay && nodemon\"",
"delay": "node -e \"setTimeout(() => true, 3000)\"",

Где:

  • одновременно одновременно запускает Electron и Angular/Webpack для более быстрой разработки.
  • нодмон наблюдает за моими электронными файлами и перезапускает приложение, когда я сохраняю изменения
  • задерживать просто использует node для задержки первого запуска nodemon (работает на всех операционных системах...)

И просто для ясности, мои nodemon.json:

{
    "watch": ["nucleus"],
    "ext": "*",
    "exec": "tsc -p nucleus/tsconfig.json && electron ."
}

вид-vhcl-cntr-ctgrs.tpl

я заменяю это имя файла, как показано ниже.

вид-vhclcntr-ctgrs.tpl

и это сработало....

Как сейчас написано, ваш ответ неясен. Пожалуйста, редактировать, чтобы добавить дополнительную информацию, которая поможет другим понять, как это относится к заданному вопросу. Дополнительную информацию о том, как писать хорошие ответы, можно найти в справочном центре.

Community 08.10.2021 18:02

Другие вопросы по теме