【问题标题】:UIwebView's shouldStartLoadWithRequest: delegate method Does not Receive all Load RequestsUIwebView 的 shouldStartLoadWithRequest: 委托方法没有接收到所有的加载请求
【发布时间】:2013-11-09 00:18:31
【问题描述】:

我正在使用 UIWebView 的 shouldStartLoadWithRequest:navigationType: 委托方法来拦截在网页中执行的 html 链接。我这样做是为了可以从网页接收实时通知。但是,我正在快速连续执行大约 5 个网页加载,以尝试接收自定义 URL 方案传递的数据。我现在只是想把它们全部记录下来,所以我的代码如下所示:

-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSLog(@"Received Request: %@", request);
    return NO;

}

但是,所有请求都不是通过 NSLog 记录的。我已经确认请求是通过 OSX Safari 网络浏览器的 iPhone 模拟器日志发送的,并且它们确实出现在那里。

我有没有办法通过 shouldStartLoadWithRequest: 委托方法接收所有这些请求?

【问题讨论】:

  • 这是预期行为。请参阅this answer。
  • 感谢您引导我回答一个帮助我思考这个问题的问题。但是,我不确定它是否能解决我的问题。我不想让 webViewDidFinishLoad 被调用。我试图让 shouldStartLoadWithRequest: 在每次加载我的自定义 URL 方案之一后加载。

标签: javascript ios iphone objective-c uiwebview


【解决方案1】:

我提到另一个答案是因为它引用了Native Bridge,它可用于在 JavaScript 和 Objective C 之间传递消息。即使这不是你的目标,它也展示了让你的调用命中 shouldLoad/didFinish 方法的方法.该技术是在页面中添加一个隐藏的 iFrame,在该 iFrame 中加载请求,然后请求将命中您的委托方法。

【讨论】:

  • 就是这样,感谢您将我的注意力专门用于该解决方案。那确实解决了我的问题。非常感谢!
猜你喜欢
  • 2017-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-20
  • 2013-07-02
  • 1970-01-01
相关资源
最近更新 更多