0

Я использую скрипт содержимого расширения Chrome для программного ввода другого сценария контента, который может обращаться к переменным веб-страницы и DOM. Я делаю это на YouTube, чтобы дождаться события onYouTubePlayerReady.Как я могу уловить ошибки в программном применении JavaScript из расширения Chrome?

Итак, у меня есть файл content_script.js, который содержит:

var s = document.createElement('script'); 
s.src = chrome.extension.getURL('src/js/content_script_inject.js'); 
(document.head||document.documentElement).appendChild(s); 
s.onload = function() { 
    s.parentNode.removeChild(s); 
}; 

И файл content_script_inject.js, который выполняет действия на самой веб-страницы. В моем закачиваемом содержимом сценарии, я жду onYouTubePlayerReady события

function onYouTubePlayerReady(playerId) { 
    foo(); // <-- function not defined, error does not show in console 
} 
foo(); // <-- error shows in console 

Если ошибка выполнения вызвана, например, вызов функции, которая не существует такие как foo() в описанном выше случае, я не вижу в этом ошибка на консоли, когда она вызывается изнутри этой функции.

Итак: Как я могу уловить ошибки, сгенерированные в этом JavaScript при программировании? Я предполагаю, что это потому, что функция вызывается из JavaScript YouTube ...?

+0

_ «Однако если этот вложенный сценарий содержит синтаксическую ошибку или если какая-либо ошибка во время выполнения вызвана, например, вызовом функции, которая не существует, я не вижу эту ошибку на консоли» _ Это, конечно, не нормальный. Обнаружение ошибок из кода - отдельная тема, но ошибки должны регистрироваться. – Xan

+0

@ Xan Я только что проверил это снова, и вы правы. Что-то еще должно было заставить ошибку sytnax не появляться. На самом деле, только ошибки времени выполнения не регистрируются. – slhck

+0

Вы уверены, что на самом деле есть ошибка? Можете ли вы предоставить (и проверить) минимальный пример того, что должно произойти, но не печатает ошибку? – Xan

ответ

1

ошибка называется выполнения ошибка а, если, ну, это происходит когда код выполняется.

Только ваш сценарий объявляетonYouTubePlayerReady, но фактически не запускает его (предполагается, что он будет запущен чем-то другим позже). Таким образом, вы не можете видеть ошибки времени выполнения: там нет . Все же.

Ошибки синтаксиса, напротив, являются ошибками разбора. Таким образом, вы увидите их независимо.


Обратите внимание, что в вашем конкретном случае, тот факт, что вы не видите ошибки, вероятно, означает YouTube API либо уже пытались вызвать функцию, или никогда не пытается. Возможно, вы захотите установить параметр сценария содержимого run_at на «document_start», чтобы исключить первую возможность.

Если вы уверены, что код будет выполнен, потенциально возможно, что на странице (или YT API) есть глобальный обработчик исключений, который задерживает ошибки во время выполнения. В этом случае вы можете попытаться включить код try...catch в свой код, чтобы ловить и записывать исключения до того, как они начнут пузыриться.

+0

Ну, но * что-то еще *, когда он запускает эту функцию позже, включая вызов неопределенной функции, все еще выполняется на моей машине, нет? Так что где-то этот вызов должен потерпеть неудачу. Нет ли способа увидеть, когда это произойдет? – slhck

+0

Вы уверены, что ваш код вообще выполняется? – Xan

+0

Да, код запускается, иначе мой скрипт не сработает. Я делаю другие вещи в этой функции. Вполне вероятно, что YT может заставить замолчать эти ошибки. Я попробую что-нибудь и вернусь к вам. – slhck