Как внедрить Javascript в элемент управления WP7 WebBrowser? - PullRequest
5 голосов
/ 02 декабря 2011

Я могу вставить JavaScript в элемент управления WebBrowser в форме C # windows по этой ссылке

Как добавить JavaScript в элемент управления WebBrowser?

Но я не могу этого сделатьв WP7, пожалуйста, помогите мне.

Ответы [ 2 ]

7 голосов
/ 02 декабря 2011

К сожалению WebBrowser.Document недоступно на WP7.Но вы можете создать и вызвать функцию JavaScript, используя InvokeScript.Посмотрите здесь , где я описываю как.

Короче: вы не используете .Document и C #, но вместо этого создаете фрагмент JavaScript.Затем вы вызываете eval с этим сценарием в качестве параметра, чтобы вызвать его.Как это:

webBrowser1.InvokeScript("eval", "  ...code goes here... ");
1 голос
/ 13 марта 2014

Для десктопа WebBrowser (WinForms / WPF) на веб-странице должен присутствовать хотя бы один тег <script>, чтобы InvokeScript("eval", ...) работал. То есть, если страница не содержит JavaScript (например, <body></body>), eval не работает как есть.

У меня не установлен Windows Phone SDK / эмулятор, чтобы проверить, так ли это и с Windows Phone WebBrowser.

Тем не менее, следующее приложение для Магазина Windows работает. Хитрость заключается в том, чтобы сначала использовать this.webBrowser.InvokeScript("setTimeout", ...) для добавления некоторого JavaScript. Я использую его вместо execScript, что устарело с IE11.

async void MainPage_Loaded(object sender, RoutedEventArgs e)
{
    // load a blank page
    var tcsLoad = new TaskCompletionSource<object>();
    this.webBrowser.NavigationCompleted += (s, eArgs) =>
        tcsLoad.TrySetResult(Type.Missing);
    this.webBrowser.NavigateToString("<body></body>");
    await tcsLoad.Task;

    // first add a script via "setTimeout", JavaScript gets initialized
    var tcsInit = new TaskCompletionSource<object>();
    this.webBrowser.ScriptNotify += (s, eArgs) =>
    {
        if (eArgs.Value == "initialized")
            tcsInit.TrySetResult(Type.Missing);
    };
    this.webBrowser.InvokeScript("setTimeout", 
        new string[] { "window.external.notify('initialized')", "0" });
    await tcsInit.Task;

    // then use "eval"
    this.webBrowser.InvokeScript("eval", 
        new string[] { "document.body.style.backgroundColor = 'yellow'" });
}

Буду признателен, если кто-нибудь сможет подтвердить, работает ли это для WP WebBrowser или нет. LoadCompleted следует использовать для WP вместо NavigationCompleted в приведенном выше коде, а WebBrowser.IsScriptEnabled необходимо установить на true.

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