如何在WP7 WebBrowser控件中注入Javascript

本文关键字:注入 Javascript 控件 WebBrowser WP7 | 更新日期: 2023-09-27 18:16:18

我可以通过这个链接在c#窗体的WebBrowser控件中注入JavaScript

如何在WebBrowser控件中注入JavaScript ?

但是我不能在WP7中这样做,请帮助我。

如何在WP7 WebBrowser控件中注入Javascript

遗憾的是,WebBrowser.Document在WP7上不可用。但是您可以使用InvokeScript创建并调用JavaScript函数。请看这里,我是如何描述的。

简而言之:你不使用.Document和c#,而是创建一个JavaScript代替。然后使用这个脚本作为参数调用eval来调用它。这样的:

webBrowser1.InvokeScript("eval", "  ...code goes here... ");

对于桌面WebBrowser (WinForms/WPF),至少一个<script>标签必须出现在InvokeScript("eval", ...)工作的网页上。也就是说,如果页面不包含任何JavaScript(例如<body></body>), eval将无法正常工作。

我没有安装Windows Phone SDK/模拟器来验证这是否也是Windows Phone WebBrowser的情况。

尽管如此,以下内容适用于Windows Store应用程序。诀窍是先使用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