WebView和WebPage之间的通信 - Titanium Studio

时间:2012-10-15 14:03:31

标签: titanium

我正在使用移动项目(使用Titanium Studio),我有以下情况

1)我的移动应用程序联系Rails后端检查一些数据,比如检查a的有效性    用户ID。

2)我找到了一种在移动应用中加载网页的方法,即WebView

3)我能够加载所需的网址,http://www.mydomain.com/checkuser?uid=20121    这将返回status:success

之类的数据

但我需要阅读这些数据以显示服务器的响应是成功还是失败,我该如何实现?

注意:上面提到的场景是一个用例,但实际上发生的是我在WebView加载第三方网址,当用户输入数据并提交时,结果将是回到我的网站网址。

编辑:所以流程如下所示

1)WebView加载了第三方网址,例如http://www.anyapiprovider.com/processdata

2)用户将在此网页中输入数据集并提交页面

3)提交的数据将由apiprovider处理,并将数据返回到我的网页上说http://www.mydomain.com/recievedata

这就是我没有使用GET直接使用HTTPClient的原因 仅供参考:我试图直接从实际网页发送Ti.APP事件,正如一些文章所建议的那样,但大多数人都说这只有在加载的文件是本地文件而不是远程文件时才有效。 Reference Link

如果我的方法有待改进,请建议我。

由于

3 个答案:

答案 0 :(得分:2)

如果您不想遵循Josiah的建议,那么请查看Titanium文档,了解如何添加webview.addEventListener('load',...事件监听器并使用webview.evalJS()将您自己的代码注入第三方HTML。

也许您可以注入代码来捕获提交事件并触发Ti事件以触发从您的网站下载数据。

Communication Between WebViews and Titanium - Remote Web Content Section

答案 1 :(得分:1)

我找到了解决问题的方法

1)在网页浏览中加载http://www.mydomain.com/checkuser?uid=20121

2)让用户输入并向第三方网址提交数据

3)接收第三方网址的回复,并在<div id="result">status:success</div>页面中仅打印http://www.mydomain.com/recievedata

4)为Web视图添加事件监听器,如下所示

webView.addEventListener('load', function(data) 
{ 
   //Add condition to check if the loaded web page has any div with id = result (to check if this is /recievedata page)
    alert(webView.evalJS("document.getElementById('result').innerHTML"));
});

以上警告会打印结果status:success,在webview加载事件中读取它 并相应地采取行动。

它适用于我。

答案 2 :(得分:0)

不是将其加载到WebView中,为什么不使用HTTP客户端获取它?这更清洁,更基于标准:

var xhr_get = Ti.Network.createHTTPClient({
    onload : function(e) {
        // Here is your "status:success" string
        var returnValue = this.responseText;
    },
    onerror : function(e) {
        Ti.API.info(this.responseText);
        Ti.API.info('CheckUserProgressOnActivity webservice failed with message : ' + e.error);
    }
});
xhr_get.open('GET', 'http://www.mydomain.com/checkuser?uid=20121');
xhr_get.send();