我发布此邮件是因为我没有找到任何答案。
我向UIWebView
发送了一个请求,但未调用webViewDidStartLoad
。我需要使用方法reload,然后它会工作。顺便说一下,shouldStartLoadWithRequest
被调用两次。
如果我使用的是测试网址(比如Google),我不会遇到任何问题。所以它似乎不是来自我的代码。
但是在这里,我正在调用一个使用大量角度JS的丑陋网站(我不知道它是如何制作的)。奇怪的是,它在Safari上运行良好。
我不明白的是它只会在shouldStartLoadWithRequest
中被“卡住”。但没有回调。什么都没发生,甚至(didFailLoadWithError:
)。
有什么想法吗?
** * 编辑 * ** * *
好的,我发现了问题,但这仍然是一个奇怪的相关问题。我发现解决方案试图向您发送代码,我无法相信代码实际上正在运行。
事实是,当我的网页视图被隐藏时,我正在调用http请求,而我不知道为什么,第二个调用永远不会正常工作。您无法重现“错误”,因为该网站是沙盒,并且我已在Google上进行过测试,这样可行。
你需要知道我测试的网站使用了很多基于GUI状态的角度JS。如果有人仍然可以解释我怎么能从服务器端(从未调用webViewDidStartLoad)阻止uiwebview,我会很高兴。所以这个bug与100%服务器有关。
这里是代码:
@interface ViewController ()<UIWebViewDelegate>
@property(nonatomic, retain)UIWebView* webview;
@end
@implementation ViewController
@synthesize webview = _webview;
#pragma mark - UIWebViewDelegate
- (BOOL)webView:(UIWebView *)webView
shouldStartLoadWithRequest:(NSURLRequest *)request
navigationType:(UIWebViewNavigationType)navigationType{
return YES;
}
- (void)webViewDidStartLoad:(UIWebView *)webView{
// With that ugly site it will be never called if _webview.hidden is set to true.
}
#pragma mark - lifeCycle
- (void)viewDidLoad{
[self setUpWebView];
// first time, it will work.
[self performSelector: @selector(loadUrlString:) withObject: @"http://theUglySite.com" afterDelay: 1];
// now, if the uiwebview is hidden, no response.
[self performSelector: @selector(loadUrlString:) withObject: @"http://theUglySite.com" afterDelay: 3];
[super viewDidLoad];
}
#pragma mark - logic
- (void)setUpWebView{
self.webview = [[[UIWebView alloc] initWithFrame:(CGRect){0,0,320,480}] autorelease];
_webview.delegate = self;
// hidding the webView will break the delegate callBack. That will still work on normal
// urlRequest.
_webview.hidden = YES;
[self.view addSubview: _webview];
}
- (void)loadUrlString:(NSString*)urlString{
NSURL* url = [NSURL URLWithString: urlString];
NSURLRequest* request = [NSURLRequest requestWithURL: url];
[_webview loadRequest: request];
}
@end
答案 0 :(得分:0)
显然,ios中的webview专门检查html dom中的“iframe”标签,如果找到,它也会根据该标签创建事件。因此,一个简单但不完整的解决方案是在正在改变的dom部分添加以下代码(例如,在每个部分的实际模板中):
<iframe></iframe>
为我做了诀窍..我也使用angularjs版本1.3.16