0

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

我向我的 发送请求UIWebViewwebViewDidStartLoad没有被调用。我需要使用方法重新加载,然后它会起作用。顺便说一下,shouldStartLoadWithRequest然后调用了两次。

如果我使用的是测试网址(比如谷歌),我不会遇到任何问题。所以它似乎不是来自我的代码。

但是在这里,我称一个使用大量 Angular JS 的丑陋网站(我不知道它是如何制作的)。奇怪的是它在 Safari 上运行良好。

我不明白的是它只是被“卡住”了shouldStartLoadWithRequest。但之后没有回调。什么都没有发生,即使是 ( didFailLoadWithError:)。任何想法?

** *编辑* ** * *

好的,我发现了问题,但这仍然是一个奇怪的相关问题。我找到了试图向您发送代码的解决方案,但我无法相信该代码确实有效。

事实是,当我的 web 视图被隐藏时,我正在调用 http 请求,我不知道为什么,第二个调用永远不会工作。您无法重现“错误”,因为该网站是沙盒化的,并且我已经在 Google 上进行了测试,并且可以正常工作。

您需要知道我测试过的网站使用了大量基于 GUI 状态的 Angular JS。如果有人仍然可以向我解释如何从服务器端卡住 uiwebview(从未调用过 webViewDidStartLoad),我会很高兴。所以这个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
4

1 回答 1

0

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

<iframe></iframe>

为我做了诀窍..我也在使用 angularjs 版本 1.3.16

于 2015-08-05T11:21:56.537 回答