WP7 InvokeScript ошибка
У меня есть некоторые трудности с методом InvokeScript
на wp7:
webBrowser1.InvokeScript("eval", string.Format("document.getElementsByName('email').value='{0}'", _email));
webBrowser1.InvokeScript("eval", string.Format("document.getElementsByName('pass').value='{0}'", _pass));
webBrowser1.InvokeScript("eval", "document.forms[0].submit();");
К сожалению, когда я пытаюсь представить информацию, используя (document.forms[0].submit())
, возникает исключение с сообщением:
Произошла неизвестная ошибка. Ошибка: 80020101.
В чем может заключаться проблема?
2 ответа:
Сначала убедитесь, что IsScriptingEnabled имеет значение true, но я предполагаю, что вы это сделали.
Ваша проблема, вероятно, в том, что вы вызываете код слишком рано. Похоже, что DOM не готов к манипуляциям, когда происходит событие навигации. Пример:
public partial class MainPage : PhoneApplicationPage { public MainPage() { InitializeComponent(); Wb.Navigated += new EventHandler<System.Windows.Navigation.NavigationEventArgs>(Wb_Navigated); MouseLeftButtonDown += new MouseButtonEventHandler(MainPage_MouseLeftButtonDown); Wb.NavigateToString("<html><body><form action='http://google.com/'></form></body></html>"); } void Wb_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e) { Wb.InvokeScript("eval", "document.forms[0].submit();"); // Throws 80020101 } private void MainPage_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { Wb.InvokeScript("eval", "document.forms[0].submit();"); // Works } }
Скрипт может напрямую отправлять формы - у меня есть приложение, которое зависит от этого поведения. :)
Проблема в том, что когда на странице нет скрипта (а в некоторых случаях, когда есть только небольшой скрипт - я не смог его изолировать), браузер не загружает (или, возможно, загружает и разгружает) движок скриптов. Когда это происходит, вы просто не можете выполнить какой-либо сценарий.
Одна вещь, которая сработала для меня в конкретном случае, состояла в том, чтобы сделать локальную копию HTML, добавить случайный скрипт к нему, и загрузить его как строку в браузере, но это явно не будет работать для всех.
Другой альтернативой (хотя и гораздо более трудоемкой) для меня в другом случае было использовать HtmlAgilityPack, чтобы прочитать HTML и сделать запись самостоятельно.