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];
}