Objective c 使用webView:DecisionPolicyFornavigationAction:request:frame:decisionListener:method加载不同的页面

Objective c 使用webView:DecisionPolicyFornavigationAction:request:frame:decisionListener:method加载不同的页面,objective-c,cocoa,macos,webkit,Objective C,Cocoa,Macos,Webkit,大家好 我想在调用以下方法时加载一个新页面…我正在使用以下代码 (void)webView:(WebView *)webView decidePolicyForNavigationAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id )listener { [[myWebView mainFrame] loa

大家好

我想在调用以下方法时加载一个新页面…我正在使用以下代码



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

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

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

该值应该是
WebNavigationType
enum:
WebNavigationTypeLinkClicked,
WebNavigationTypeFormSubmitted,
WebNavigationTypeBackForward,
WebNavigationTypeReload,
WebNavigationTypeForm重新提交,
WebNavigationTypeOther

单击链接后,您将首先得到
WebNavigationTypeLinkClicked
,在这里您可以决定是加载单击的页面还是加载其他内容。

在获得页面加载的
WebNavigationTypeOther
后,您可以立即忽略它

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

并让webView转到您的其他url:
[myWebView setMainFrameURL:otherUrlStr]


谢谢

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

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