【问题标题】:loading different page using webView: decidePolicyForNavigationAction: request: frame: decisionListener: method使用 webView 加载不同的页面:decisionPolicyForNavigationAction:request:frame:decisionListener:method
【发布时间】:2010-11-29 11:39:39
【问题描述】:
大家好,
我想在调用以下方法时加载一个新页面..我正在使用以下代码..
(void)webView:(WebView *)webView decidePolicyForNavigationAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id )listener
{
[[myWebView mainFrame] loadRequest:someRequest];
}
但是这个方法被多次调用,如果我使用 [listener use] 而不是 loadRequest,我的应用程序会崩溃,它可以正常工作,但会启动单击的 url。但我想加载其他一些网址怎么可能?
【问题讨论】:
标签:
objective-c
cocoa
macos
webkit
【解决方案1】:
您应该简单地添加[listener ignore] 方法调用。
- (void)webView:(WebView *)webView decidePolicyForNavigationAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id )listener
{
[listener ignore];
[[myWebView mainFrame] loadRequest:someRequest];
}
【解决方案2】:
如你所说,被多次调用,所以你要注意这个:
[actionInformation valueForKey: @"WebActionNavigationTypeKey"]
该值应该是 WebNavigationType 枚举之一:
WebNavigationTypeLinkClicked,
WebNavigationTypeFormSubmitted,
WebNavigationTypeBackForward,
WebNavigationTypeReload,
WebNavigationTypeFormResubmitted,
WebNavigationTypeOther
您将首先获得WebNavigationTypeLinkClicked 作为点击链接的结果,在这里您可以决定是否加载点击的页面或其他内容。
在你得到WebNavigationTypeOther 之后立即加载页面,你可以忽略它。
【解决方案3】:
嗯,在这个方法中,必须返回一个值。
您应该决定是否接受此网址。
因此,如果 WebView 将转到您不想要的页面,
你应该返回忽略。
让 webView 转到您的其他网址:[myWebView setMainFrameURL:otherUrlStr]
谢谢