8 macos cocoa webkit uiwebview ios
我正在尝试将iOS应用程序移植到OSX,有一件事我没有得到.iOS应用程序使用UIWebView,更精确的是实现UIWebViewDelegate的UIView:
@interface Dialog : UIView <UIWebViewDelegate> {
Run Code Online (Sandbox Code Playgroud)
并实现这三个委托方法:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request
navigationType:(UIWebViewNavigationType)navigationType {
- (void)webViewDidFinishLoad:(UIWebView *)webView {
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
Run Code Online (Sandbox Code Playgroud)
有人可以给我一个暗示我如何将其移植到正常的OSX框架?我知道有WebView,但它有4个代表,据我所知,并且这些代理都没有委托方法听起来像那些3.
谢谢
对于第一个,您可能想要使用WebPolicyDelegate.而对于另外两个,WebFrameLoadDelegate中有相应的方法:
- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame
- (void)webView:(WebView *)sender didFailLoadWithError:(NSError *)error forFrame:(WebFrame *)frame
Run Code Online (Sandbox Code Playgroud)
关于iOS UIWebView webView:shouldStartLoadWithRequest:navigationType:,要使用OSX完成此任务WebView:
为WebView实例设置WebPolicyDelegate委托:
self.webview.policyDelegate = self;
Run Code Online (Sandbox Code Playgroud)
然后– webView:decidePolicyForNavigationAction:request:frame:decisionListener:在您的委托中实现该方法:
-(void)webView:(WebView *)webView
decidePolicyForNavigationAction:(NSDictionary *)actionInformation
request:(NSURLRequest *)request
frame:(WebFrame *)frame
decisionListener:(id < WebPolicyDecisionListener >)listener
{
int actionKey = [[actionInformation objectForKey: WebActionNavigationTypeKey] intValue];
if (actionKey == WebNavigationTypeOther)
{
[listener use];
}
else
{
//
// Here is where you would intercept the user navigating away
// from the current page, and use `[listener ignore];`
//
NSLog(@"\n\nuser navigating from: \n\t%@\nto:\n\t%@",
[webView mainFrameURL],
[[request URL] absoluteString]);
[listener use];
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3094 次 |
| 最近记录: |