2016-03-29 1 views
3

Я новичок в разработке универсальных приложений. Может ли кто-нибудь помочь мне в следующем коде,Как вызвать функции javascript в WebView в универсальном приложении Windows

У меня есть один веб-сайт с помощью веб-контроля в универсальном приложении. Я хочу прочитать некоторую контрольную ценность с того же сайта.

Мой идентификатор управления ярлыком - это «lblDestination» на веб-сайте.

я доступ к этому в универсальное приложение как MAinPage.xaml

<WebView x:Name="Browser" HorizontalAlignment="Stretch" 
       VerticalAlignment="Stretch" 
       Loaded="Browser_Loaded" 
       NavigationFailed="Browser_NavigationFailed"> 
</WebView> 

MAinPage.xaml.cs

Browser.InvokeScript("eval", new string[] { "document.getElementById('lblDestination')" }).ToString() 

Является ли это правильно читать значение управления браузера? Я использую симулятор для тестирования этого приложения. Итак, симулятор создает проблему?

ответ

6

Я не уверен, где и когда вы используете InvokeScript с функцией JavaScript eval, чтобы вводить контент на веб-страницу. Но обычно мы можем использовать WebView.DOMContentLoaded event. Это событие происходит, когда WebView закончил синтаксический анализ текущего содержимого HTML, поэтому с этим событием мы можем убедиться, что HTML-контент подготовлен.

И если мы хотим вызвать JavaScript внутри WebView контента в Windows 10 Универсальное приложение, мы бы лучше использовать WebView.InvokeScriptAsync method в

[InvokeScript могут быть изменены или недоступны для выпусков после ОС Windows 8.1 , Вместо этого используйте InvokeScriptAsync.]

Последнее, но не менее, пожалуйста, обратите внимание, что метод InvokeScriptAsync может возвращать только строки результата вызова сценария.

Вызываемый скрипт может возвращать только строковые значения.

Таким образом, если возвращаемое значение вашего JavaScript не является строкой, возвращаемое значение метода WebView.InvokeScriptAsync будет пустой строкой.

Если вы используете

var value = await Browser.InvokeScriptAsync("eval", new string[] { "document.getElementById('lblDestination')" }); 

значение будет пустой строкой, как document.getElementById('lblDestination') возвращает Element.

Так читать какое-то значение управления, вы можете попробовать использовать такой код следующим образом:

var innerText = await Browser.InvokeScriptAsync("eval", new string[] { "document.getElementById('lblDestination').innerText" }); 

И если значение, которое вы хотите получить не является строкой, то, возможно, потребуется преобразовать его в строку в JavaScript первым , Например:

var childElementCount = await Browser.InvokeScriptAsync("eval", new string[] { "document.getElementById('lblDestination').childElementCount.toString()" }); 
+0

Спасибо за быструю replyJay – Mahesh

+0

Я получил решение по этому поводу я написал метод асинхронного неправильно previous- частный асинхронный недействительным GetResponseCallbackDest (IAsyncResult результата) { – Mahesh