Почему WP7 WebBrowser InvokeScript вызывает ошибку вызова: 80020101? - PullRequest
9 голосов
/ 25 марта 2011

Эта ошибка, по-видимому, возникает для всего, что идет не так в вызываемой функции javascript:

SystemException was unhandled    
An unknown error has occurred. Error: 80020101.

Я использую javascript в качестве интерфейса к бэкенду веб-приложения, и у меня есть два вызовакоторые работают нормально, загружая и возвращая JSON из вызова ajax, который выглядит следующим образом:

В Silverlight:

MyBrowser.InvokeScript("getData", "/Me/Feed?numberOfResults=-1", "MyFeed");

Javascript, загруженный в WebBrowser

function getData(url, context) {
    $.ajax({
        url: url,
        dataType: 'jsonp',
        success: function (result) {
            callback(result, context);
        }
    });
}

Но позже я хочу отправить данные обратно на сервер, и я делаю то же самое:

MyBrowser.InvokeScript("postData", "thedata", "CreatePost");

function postData(payload, context) {
    $.ajax({
        type: "POST",
        url: "/Post/Create?" + tz(),
        data: payload,
        dataType:"json",
        success:function (result) {
            callback(result, context);
        }
    });
}

Теперь я получаю исключение.

Что действительно странно, так это то, что яЯ могу сразу вызвать функцию из скрипта, и она прекрасно отправляет сообщения на сервер.

postData("sampledata", "PostTest");

Сначала казалось, что единственное различие заключается в том, что один был GET, а другой POST, поэтому яскопировал вызов GET ajax во второй вызов (который происходит при вводе пользователем, когда первый произошел при загрузке).Результат был таким же (я получаю ту же ошибку).Я могу получить другие команды для запуска в javascript из этого события, если они не содержат ajax-вызовы (кажется).Таким образом, вы можете подумать, что это проблема времени - поэтому я переместил вызов выше, где я вызываю другие InvokeScripts, которые работают, и он все еще не работает (то же исключение).

Я также попытался вызватьэто в отдельном потоке, используя Dispatcher.BeginInvoke для хорошей меры и без костей.

Dispatcher.BeginInvoke(() =>
{
    MyBrowser.InvokeScript("postData", "thedata", "CreatePost");
});

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

Может кто-нибудь сказатьмне, что я делаю неправильно, или что я не понимаю в совместном использовании InvokeScript и Ajax ??

Спасибо!

[РЕДАКТИРОВАТЬ - добавить этот встроенный (был в комментариях)потому что я часто получаю вопрос]

Я работал над этим в течение 6 часов, и вот что я вижу:

  • есть 2 разных события, из которых яя делаю эти звонки;1) когда загрузка страницы завершена на элементе управления браузера, 2) когда пользователь нажимает мою кнопку «post»
  • , ошибка НЕ ​​возникает, когда вызов Ajax является GET из события загрузки
  • ошибка возникает при вызове того же вызова GET из пользовательского события
  • ошибка также происходит при вызове вызова Ajax с использованием POST из события загрузки
  • ошибка НЕ ​​возникает, когдавызов функции, которая не пытается выполнить Ajax из пользовательского события

Ответы [ 4 ]

6 голосов
/ 25 марта 2011

Вы получите ошибку 80020101, если не удается найти метод javascript или если JS выдает ошибку.

С точки зрения поиска метода, элемент управления будет точно соответствовать сигнатуре.Это не стандартное поведение javascript, поэтому будьте осторожны с этим.

Остерегайтесь кэширования страницы (и ее содержимого) в элементе управления браузера, так как это привлекает внимание многих людей.(

3 голосов
/ 25 марта 2011

Видя, что GET работает с JSONP, а POST вообще не работает, кажется, означает, что вы можете работать в междоменном режиме?Обычно в одном и том же домене нет необходимости использовать JSON * P *.

. Поэтому я предполагаю, что это является нарушением политики одного и того же происхождения.

0 голосов
/ 19 ноября 2012

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

Как и в одном из ответов, было указано.

0 голосов
/ 27 марта 2011

Я только что исправил подобную проблему.

Это немного странно ... требуется: 1. Передача параметров в функцию javascript одной строкой с разделителями-запятыми 2. Синтаксический анализ строки в javascript с использованием split () 3. Создание строки выражения (т.е.вызов функции с параметрами) 4. Выполнение eval () для строкового выражения.

Я думаю, вы также можете передать строку, которая превращается в массив javascript.

Tom

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...