InvokeScriptAsync不启动脚本

时间:2018-02-24 23:24:04

标签: webview uwp

我有一个UWP应用程序,我正在尝试从WebView调用脚本。 NavigationCompleted事件引发并且我的javascript被包含在内(我认为)在页面中但是脚本没有被执行。

这是我的C#代码

public sealed partial class MainPage : Page
{
    readonly WebView _webView = new WebView();
    public MainPage()
    {
        this.InitializeComponent();
        Facebook.Navigate(new Uri("http://www.facebook.com/"));
        _webView.NavigationCompleted += WebView_OnNavigationCompleted;
        _webView.ScriptNotify += WebView_OnScriptNotify;
    }

    private async void WebView_OnNavigationCompleted(WebView sender, WebViewNavigationCompletedEventArgs args)
    {
        await _webView.InvokeScriptAsync("eval", new[]
        {
            "alert('HEY');" + 
            "window.external.notify('%%' + location.href);"
        });
    }

    private void WebView_OnScriptNotify(object sender, NotifyEventArgs e)
    {
        var url = e.Value;
    }
}

此外,我将http://www.facebook.comhttps://www.facebook.com添加到我的包清单内容Uris列表中(包含所有WinRT访问权限)。

我无法获得提示弹出,同样适用于通知。

由于

1 个答案:

答案 0 :(得分:0)

WebView docs所述,alert无法在WebView控件中使用。

要使脚本通知正常工作,您还需要将页面添加到应用清单中:

  

要在调用window.external.notify时启用外部网页以触发ScriptNotify事件,您必须在应用清单的ApplicationContentUriRules部分中包含页面的统一资源标识符(URI)。

  

此列表中的URI必须使用HTTPS

因此,请尝试导航到https网站。

最糟糕的情况是,您可以使用网络允许的对象与您的应用进行通信,因为可以在所有情况下注入。