Objective c 未调用UIWebView webViewDidStartLoad

Objective c 未调用UIWebView webViewDidStartLoad,objective-c,uiwebview,Objective C,Uiwebview,我发布此消息是因为我没有找到任何答案 我将请求发送到我的UIWebView,webviewdidstartoad未被调用。我需要使用重新加载的方法,然后它就会工作。顺便说一下,shouldStartLoadWithRequest会被调用两次 如果我使用一个测试url(比如说Google),我不会遇到任何问题。所以它似乎不是来自我的代码 但在这里,我给一个丑陋的网站打电话,它使用了很多有棱角的JS(我不知道它是如何制作的)。奇怪的是,它在Safari上运行得很好 我不明白的是,它只是“卡在”sho

我发布此消息是因为我没有找到任何答案

我将请求发送到我的
UIWebView
webviewdidstartoad
未被调用。我需要使用重新加载的方法,然后它就会工作。顺便说一下,
shouldStartLoadWithRequest
会被调用两次

如果我使用一个测试url(比如说Google),我不会遇到任何问题。所以它似乎不是来自我的代码

但在这里,我给一个丑陋的网站打电话,它使用了很多有棱角的JS(我不知道它是如何制作的)。奇怪的是,它在Safari上运行得很好

我不明白的是,它只是“卡在”
shouldStartLoadWithRequest
中。但在没有回调之后。什么也没有发生,甚至(
didFailLoadWithError:
)。 有什么想法吗

***编辑******

好的,我发现了问题,但这仍然是一个奇怪的相关问题。我已经找到了向您发送代码的解决方案,但我不敢相信代码真的起作用了

事实上,当我的web视图被隐藏时,我正在调用http请求,我不知道为什么,第二个调用永远不起作用。你不能复制这个“bug”,因为这个网站是沙盒的,我已经在谷歌上测试过了,这很有效

您需要知道,我测试过的站点使用了大量基于GUI状态的angular JS。如果有人仍然可以解释uiwebview如何从服务器端卡住(webViewDidStartLoad从未调用),我会很高兴。因此,该漏洞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
@界面视图控制器()
@属性(非原子,保留)UIWebView*webview;
@结束
@实现视图控制器
@综合网络视图=_网络视图;
#pragma标记-UIWebViewDelegate
-(BOOL)webView:(UIWebView*)webView
shouldStartLoadWithRequest:(NSURLRequest*)请求
导航类型:(UIWebViewNavigationType)导航类型{
返回YES;
}
-(void)webView加载:(UIWebView*)webView{
//对于那个丑陋的网站,如果_webview.hidden设置为true,它将永远不会被调用。
}
#pragma标记-生命周期
-(无效)viewDidLoad{
[自设置网络视图];
//第一次,它会起作用。
[自执行选择器:@选择器(loadUrlString:)withObject:@”http://theUglySite.com“延迟后:1];
//现在,如果uiwebview被隐藏,则没有响应。
[自执行选择器:@选择器(loadUrlString:)withObject:@”http://theUglySite.com“延迟后:3];
[超级视图下载];
}
#pragma标记逻辑
-(无效)setUpWebView{
self.webview=[[UIWebView alloc]initWithFrame:(CGRect){0,0320480}]autorelease];
_webview.delegate=self;
//隐藏webView将中断委托回调。这在正常情况下仍然有效
//请求。
_webview.hidden=是;
[self.view addSubview:_webview];
}
-(void)loadUrlString:(NSString*)urlString{
NSURL*url=[NSURL URLWithString:urlString];
NSURLRequest*request=[nsurlRequestRequestWithURL:url];
[_webviewloadrequest:request];
}
@结束

显然,ios中的webview专门检查html的dom中的“iframe”标记,如果找到,它也会基于该标记创建事件。因此,一个简单但不完整的解决方案是在正在更改的dom部分(例如,在每个部分的实际模板中)添加以下代码:



为我做了这个把戏。。我也在使用angularjs 1.3.16版

你能分享你的代码吗?你在
.h
文件中实现了
UIWebviewDelegate
吗?@AkshitZaveri如果他没有实现
UIWebviewDelegate
它将永远不会调用
webviewDidStartLoad
并且
应该加载请求:
。因此,如果它最终成功地实现了这些方法,那么必须实现这一点。您是否在主线程上调用了请求?是的,代码正在主线程上运行。我的代码适用于每个普通URL。但是当它是那个(糟糕的)站点时,我需要调用[webView reload]来实现它,但是委托调用会被调用两次。如果我不这样做,什么也不会发生
<iframe></iframe>