【问题标题】: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]

        谢谢

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-02-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-12-04
          • 2021-12-03
          • 1970-01-01
          相关资源
          最近更新 更多