使用webView加载不同的页面:decisionPolicyForNavigationAction:request:frame:decisionListener:method

时间:2010-11-29 11:39:39

标签: objective-c cocoa macos webkit

Hii All,

我想在调用以下方法时加载新页面....我使用以下代码..



(void)webView:(WebView *)webView decidePolicyForNavigationAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id )listener
{
  [[myWebView mainFrame] loadRequest:someRequest];
}

但这个方法被多次调用,如果我使用[listener use]而不是loadRequest我的应用程序崩溃它工作正常但是启动了点击的url。但我想加载一些其他网址怎么可能?

3 个答案:

答案 0 :(得分:2)

您只需添加[listener ignore]方法调用。

- (void)webView:(WebView *)webView decidePolicyForNavigationAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id )listener
{
    [listener ignore];
    [[myWebView mainFrame] loadRequest:someRequest];
}

答案 1 :(得分:1)

如你所说,它被多次调用,所以你必须注意这一点:
[actionInformation valueForKey: @"WebActionNavigationTypeKey"]

该值应为WebNavigationType枚举之一:
WebNavigationTypeLinkClicked,
WebNavigationTypeFormSubmitted,
WebNavigationTypeBackForward,
WebNavigationTypeReload,
WebNavigationTypeFormResubmitted,
WebNavigationTypeOther

点击链接后,您将首先获得WebNavigationTypeLinkClicked,此处您可以决定是否加载点击的网页或其他内容。
在您获得页面加载WebNavigationTypeOther之后,您可以立即忽略它。

答案 2 :(得分:1)

嗯,在这种方法中,必须返回一个值。 您应该决定是否接受此网址。 因此,如果WebView转到您不想要的页面, 你应该回来忽略。

让webView转到您的其他网址:[myWebView setMainFrameURL:otherUrlStr]

由于