0

我正在开发一个 WP8 应用程序,其中包含 WebBrowser 控件,我在其中打开一个包含 javascript 的 html 页面。javascript包含以下功能:

function send(data) {
windows.external.notify(data);

var xhr = new XMLHttpRequest();
xhr.open('GET', 'getresponse', false);
xhr.send(null);

var result = xhr.responseText;

if (result) {
       return JSON.parse(result);
            }
}

基本上,这个函数调用应用程序的原生 C# 端,我在其中运行一些函数,并且我需要能够将一些数据从原生端返回到发送函数。我想为此使用 XMLHttpRequest,我的想法是“拦截”请求 url(在本例中为“getresponse”)并通过将其包含在响应中来返回我想要的数据。

请在使用 WebBrowser 控件的 Windows Phone 8 上执行此操作吗?

再一次,我需要做的就是:

有一个 javascript 函数(在本例中称为“send”),它连接到本机应用程序(使用 windows.external.notify)并将数据传递回这个“send”函数,以便它可以返回它(以及其他 JS 函数可以使用)。

请问这可能吗?如果不使用 XMLHttpRequest,也许使用另一种技术?

谢谢大家的帮助!

4

1 回答 1

0

您正在寻找InvokeScript

如果您可以完全控制 WebBrowser 中显示的页面(例如服务器是您的),您可以定义要调用的 JS 函数:

webBrowser.InvokeScript("yourJSFunction", "param1", "param2");

如果您显示来自外国网络服务器的网站,您可以像这样注入 JS(这使用 jQuery):

webBrowser.InvokeScript("eval", "window.youInjectedFunction = function() {" +
                                "window.external.notify('and_notify_back');" +
                            "}; " +
                            "window.readyStateCheckInterval = setInterval(function() {" + 
                                "window.external.notify('timer');" +
                                "if (document.readyState === 'complete') {" +
                                    "clearInterval(window.readyStateCheckInterval);window.yourInjectedFuntion();" +
                            "}}, 100);" +
                            "");

我使用了计时器,因为您无法确定在页面完全加载后是否调用了InvokeScript 。

如果您可以控制来源,则绝对应该选择选项1。

于 2013-11-11T16:40:25.140 回答