Идея, на которую указал Мэтт, великолепна - и, вероятно, верна, и я думаю, что она запустит ваш скрипт.
Но, если это не так, тогда я все же думаю, что ваш скрипт вызывается слишком быстро, но по какой-то другой причине.
Встроенные сценарии выполняются (почти) сразу же после того, как их заметили, а компонент WebBrowser имеет ошибку / особенность ... возможность касаться элемента BODY только после определенного небольшогопериод времени после загрузки документа.Я написал об этом в другом месте, я могу предоставить вам ссылку, если вы заинтересованы.Эта проблема возникает в основном при попытке InvokeScript с помощью обработчика событий Navigated, но я предполагаю, что это какая-то общая внутренняя проблема гонки где-то в браузере, поэтому, вероятно, это может относиться и к вашему случаю.
Если проблема возникает,ваши сценарии вызовут исключение COM при касании элемента BODY.Если это сделано в InvokeScript - вы будете уведомлены о некрасивом и совершенно бессмысленном исключении.Но если это происходит в сценарии - например, автоматическое срабатывание при загрузке тела или в каком-либо обратном вызове JavaScript-Timer - тогда браузер погасит исключение и молча прекратит выполнение сценария.К сожалению, если это произойдет, единственный способ «обойти» это обнаружение проблемы и повторение / задержка вызова - или искусственная задержка вызова примерно на 125-250 мс, и я имею в виду, внешне, а не JS-Timer, какJS-Timer поймает «сломанную» (или, скорее, не готовую) ссылку на тело в закрытии.Это случилось со мной ровно один раз в OS7.5.
Кроме того, вы можете попробовать переместить IsScriptEnabled = true в качестве первого имени сразу после x: имени.Это может звучать глупо, но, поверьте мне, WebBrowser также может иметь проблемы с этим.Я тоже могу указать вам ссылку, но сейчас она в основном не имеет значения, пожалуйста, проверьте ее, чтобы быть уверенным.Я почти уверен, что ваш обработчик событий Loaded вызывается с правильным временем, но если по какой-то причине это не так - это мгновенно волшебным образом решит проблему.
// edit: в комментарии, которые я добавил кMatt's:
<WebBrowser (....) ScriptNotify="script_msg_handler" />
обработчик:
private void script_msg_handler(object sender, NotifyEventArgs e)
{
System.Diagnostics.Debugger.WriteLine("WebBrwNotify:{0}", e.Value);
}
и измените скрипт на:
window.external.notify("0001");
var d = document;
window.external.notify("0002");
var elem = d.getElementById('welcomeMsg');
window.external.notify("0003");
elem.innerHTML += 'Script has executed!'
window.external.notify("0004");
Проверка окна вывода для таких журналов отладки покажет вам,скрипт вызывается вообще, и какая его часть вызвала сбой.Однако вы все равно не сможете точно определить причину, поскольку некоторые исключения исключаются из браузера native .