在Windows 8.1存储HTML5应用程序中从webview检索数据

fun*_*bro 2 webview windows-store-apps windows-8.1

我正在开发一个Windows应用商店HTML5/Javascript应用.作为我的应用程序的一部分,我需要在网页上调用Javascript方法并检索其返回值.

该控件x-ms-webview有一个方法invokeScriptAsync可以调用webview上的脚本.但是,无法从任何方法调用中检索值.

它似乎也不支持与主机应用程序通信的标准方法window.external.notify.

如何从Windows应用商店应用webview中的网页检索值?

Kra*_*SFT 5

您可以从调用的脚本中获取返回值,但必须向invokeScriptAsync返回的对象添加一个不完整的处理程序.例如,采用HTML Webview控件示例的方案5 并修改5_InvokeScript.js中的代码,如下所示:

function invokeScript() {
    var op = document.getElementById("webview").invokeScriptAsync("changeText", document.getElementById("textInput").value);

    op.oncomplete = function (e) {
        console.log(e.target.result);
    };

    op.start();
}
Run Code Online (Sandbox Code Playgroud)

然后在script_example.html中,将函数更改为:

function changeText(text) {
    document.getElementById("myDiv").innerText = text;
    return text;
}
Run Code Online (Sandbox Code Playgroud)

在应用程序中的console.log调用上设置断点,您将看到e.target.result包含返回值.

window.external.notify也起作用,MSWebViewScriptNotify从Webview 提升事件.请注意,MSWebViewScriptNotify将仅从加载了ms-appx-web,ms-local-stream和https内容的Web视图引发,其中https还需要清单中的内容URI规则,否则该事件将被阻止.如果您涉及URI解析器,也允许使用ms-appdata.通过navigateToString加载的webview没有此要求.