我正在开发一个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,可能使用其他技术?
谢谢大家的帮助!
答案 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.