2013-11-11 5 views
0

Я работаю над WP8-приложением, содержащим элемент управления WebBrowser, в котором я открываю html-страницу, содержащую javascript. Javascript содержит следующие функции:Как передать данные на веб-страницу?

function send(data) { 
windows.external.notify(data); 

var xhr = new XMLHttpRequest(); 
xhr.open('GET', 'getresponse', false); 
xhr.send(null); 

var result = xhr.responseText; 

if (result) { 
     return JSON.parse(result); 
      } 
} 

В основном эта функция вызывает родную C# сторону приложения, где я бег некоторых функций, и мне нужно, чтобы иметь возможность вернуть некоторые данные из родной стороны к функции отправки. Я хотел использовать XMLHttpRequest для этого, где моя идея состояла в том, чтобы «перехватить» URL запроса (в данном случае «getresponse») и вернуть данные, которые я хочу, включив их в ответ.

Возможно ли это на Windows Phone 8 с помощью элемента управления WebBrowser?

Еще раз, все, что мне нужно сделать, это:

Есть яваскрипт функции (в данном случае называется «отправить»), который подключается к родному приложению (используя windows.external.notify) и передавать данные к этой функции «отправить», чтобы она могла вернуть ее (и чтобы другая функция JS могла ее использовать).

Возможно ли это? Если вы не используете XMLHttpRequest, возможно, используя другой метод?

Спасибо вам за помощь!

ответ

0

Вы ищете InvokeScript.

Если у вас есть полный контроль над страницей, которая отображается внутри WebBrowser (например, сервер ваше:), вы можете определить JS-функцию, которая будет называться:

webBrowser.InvokeScript("yourJSFunction", "param1", "param2"); 

Если вывести сайт из иностранный веб-сервер, вы можете придать JS, как это (это использует JQuery):

webBrowser.InvokeScript("eval", "window.youInjectedFunction = function() {" + 
           "window.external.notify('and_notify_back');" + 
          "}; " + 
          "window.readyStateCheckInterval = setInterval(function() {" + 
           "window.external.notify('timer');" + 
           "if (document.readyState === 'complete') {" + 
            "clearInterval(window.readyStateCheckInterval);window.yourInjectedFuntion();" + 
          "}}, 100);" + 
          ""); 

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

Если вы можете контролировать источник, то вам обязательно нужно перейти на вариант 1.

Смежные вопросы