Javascript警报导致冻结.(带有AFNetworking和本机代码回调)
Javascript alert cause freeze. ( With AFNetworking and native code callback)
我想做以下列表。
- 使用UIWebView
- 点击webview上的按钮,然后执行本机代码(http请求)并获取响应
我可以得到回应。但是,它在回调函数(冻结)中不能正确地工作"alert"。
为什么喜欢那样?
谢谢。
TextViewController
#import "TestViewController.h"
#import "AFNetworking.h"
@interface TestViewController ()
@end
@implementation TestViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization]
[self initWebView] ;
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (void)initWebView{
self.webView = [[UIWebView alloc] initWithFrame:SCREEN_APPLICATIONFRAME] ;
[self.view addSubview:self.webView] ;
self.webView.delegate = self ;
[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"SOME_HTML"]]] ;
}
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)
request navigationType:(UIWebViewNavigationType)navigationType
{
if ([ request.URL.scheme isEqualToString:@"native" ]) {
if ([request.URL.host isEqualToString:@"foo"]) {
NSURL *url = [[NSURL alloc]initWithString:@"SOME_JSON_RESPONSE_URL"] ;
NSURLRequest *request = [NSURLRequest requestWithURL:url];
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
NSLog(@"SUCCESS") ;
[self.webView stringByEvaluatingJavaScriptFromString:@"cbFoo('OK')"] ;
} failure:^(NSURLRequest *request, NSURLResponse *response, NSError *error, id JSON){
NSLog(@"ERROR: %@",error) ;
[self.webView stringByEvaluatingJavaScriptFromString:@"cbFoo('NG')"] ;
}];
[operation start] ;
}
return NO;
}
// 通常のschemeの場合は、フックせずそのまま処理を続ける
else {
return YES;
}
}
@end
SOME_HTML是这样的
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset= UTF-8">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script type="text/javascript">
// callback from native
function cbFoo(result){
alert(result) ; // FREEZE!!
alert('1st') ;
alert('2nd') ;
}
</script>
</head>
<body>
<a href="native://foo" >Native Func</a><br>
</body>
</html>
使用setTimeout,它工作正常。但是,我不想使用setTimeout来解决这个问题。。。
function cbFoo(result){
setTimeout(function(){
alert(result) ;
alert('1st') ;
alert('2nd') ;
},0) ;
}
最后我写了以下代码。
NSString *str = [NSString stringWithFormat:@"setTimeout(function(){cbGetCommentData('%@');},0)", text] ;
[self.webView stringByEvaluatingJavaScriptFromString:str] ;
相关文章:
- '图片'没有用于本机道具的propType'RCTImageView.overlayColor&
- 在iOS和Android上使用React native时,我还能使用本机第三方lirbraries吗
- javascript函数访问ios本机功能
- 如何在从客户端接收数据时从本机方法触发javascript函数?
- 在浏览器中检测本机或第三方PDF插件
- 将事件发送到javascript文档的react本机模块是否正确
- 将对应用内购买的支持构建为react本机代码
- 如何在Windows上用javascript构建本机应用程序
- 在视图中渲染多个按钮以编程方式进行本机反应
- 在本机挂钩之前加载可安装挂钩
- 如何使用UI Automation JavaScript Reference for iOS appium获取本机应用程
- 控制台中的“function floor(){[本机代码]}”是什么
- 如何将chrome.tabCapture流从js传递到c++PNACL本机代码
- WKWebview-Javascript和;本机代码
- 将回调/函数从本机发送到javascript
- 为什么我得到Chrome本机消息“;找不到指定的本机消息传递主机&”;
- 检测未绑定的本机函数,如“Array.push”
- 离子 - 本机对话框
- 如何获取 jQuery 以触发本机自定义事件处理程序
- Javascript警报导致冻结.(带有AFNetworking和本机代码回调)