如何将数据传回网页?

时间:2013-11-11 13:18:40

标签: windows-phone-8 webbrowser-control

我正在开发一个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#端,在那里我运行一些函数,我需要能够将一些数据从本机端返回到send函数。我想为此使用XMLHttpRequest,其中我的想法是“拦截”请求URL(在本例中为“getresponse”)并通过将其包含在响应中来返回我想要的数据。

请在Windows Phone 8上使用WebBrowser控件吗?

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

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

这可能吗?如果不使用XMLHttpRequest,可能使用其他技术?

谢谢大家的帮助!

1 个答案:

答案 0 :(得分: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.