关于如何从JS在UIWebView中运行到托管obj-c应用程序进行通信的建议
Suggestions for how to communicate from JS running in a UIWebView to the hosting obj-c app?
我计划有一个带有uiwebview的外壳iphone应用程序,我的大部分应用程序在uiwebview中通过javascript运行。
现在我知道很容易通过使用stringByEvaluatingJavaScriptFromString从obj-c环境通信到javascript环境,但是是否有一个很好的推荐方式从javascript环境通信到obj-c世界?
谢谢
我总是使用一种方法,让应用程序"导航"到一个特殊的URL:
window.location = "myapp://somemessage/someargument";
应用程序在下面的函数中捕捉到这个:
-(BOOL)webView:(UIWebView *)webView
shouldStartLoadWithRequest:(NSURLRequest *)request
navigationType:(UIWebViewNavigationType)navigationType
{
NSURL *url = [request URL];
if ( [[url scheme] isEqualToString:@"myapp"] )
{
[self handleJSEvent:url];
return NO;
}
return YES;
}
此外,根据您的需要,您可以使用使用JSON.stringify(events)
获取的某种事件队列,以响应使用上述方法发送到应用程序的消息。对于从app到js的通信,JSON也非常合适。
如果有一个标准或标准的方法来做这件事,我显然错过了。
有一个很好的方法在UIWebView中调用javascript:
[webView stringByEvaluatingJavaScriptFromString:@"yourJSFunction('some_data');"];
回调最好像MVDS提到的那样通过Url:
完成- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
我刚刚创建了一个库,它将主要使用mvds和Ondrej描述的方法为您提供这种通信。包括双向通信,jQuery事件风格,可选的JSON有效负载和多个监听器。查看链接:https://github.com/tcoulter/jockeyjs
也许通过改变url哈希?
相关文章:
- Canvas Html5绘图应用程序,移动画布会导致重大问题
- Emberjs应用程序加载在除Index之外的所有路由上
- 使用电话间隙在Android应用程序中显示SQL Lite的数据
- 在AngularJS应用程序中使用封装指令和路由的推荐方式是什么
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- angular 1.5应用程序中的导航栏
- 在Web应用程序中使用Highcharts javascript
- angularjs+rails应用程序中未显示模板
- 使用acess代币登录Facebook,并通过网络应用程序离线发布
- 从HTTPGET返回一个自定义对象列表,以便在Angular 2应用程序中使用
- 科尔多瓦页面类应用程序中的多个谷歌地图
- 使用谷歌应用程序脚本将服务器端数据表返回到客户端
- Angularjs-utils高亮过滤器在搜索时破坏应用程序
- 在phonegap应用程序内部重定向不起作用
- 使用谷歌应用程序脚本从工作表中获取值并将其显示在文本框中
- MockJax没有在JavaScript应用程序中发送对我AJAX请求的响应
- Node.js正在更改应用程序以使用集群模块
- JavaScript 函数 mOver(obj) 应用程序
- 在 Angular 项目中迭代 JSON 响应以创建新的 $scope obj 我可以在应用程序中使用的
- 关于如何从JS在UIWebView中运行到托管obj-c应用程序进行通信的建议