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 2

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 и сделать запись самостоятельно.