【问题标题】:Get notified about a page change in UIWebView获取有关 UIWebView 中的页面更改的通知
【发布时间】:2010-05-14 14:35:18
【问题描述】:

我很好奇是否有办法检测UIWebView 中显示的网站的变化。在我正在开发的应用程序中,我们使用UIWebView 来展示部分功能,这些功能基本上是用户需要遵循的几个步骤。但是,在这些步骤结束时,我需要识别一个特定页面,然后应用程序需要显示不同的视图。

不幸的是,UIWebViewDelegate 似乎无法解决问题。

【问题讨论】:

    标签: iphone uiwebview


    【解决方案1】:

    如果用户步骤在不同的页面上是分开的,UIWebView 需要加载不同的步骤,使用委托方法确实可以做到这一点。

    在这个例子中,我们说用户经历了 3 个步骤,分别命名为 step1.htmstep2.htm,最后是 step3.htm。此代码将检测用户何时到达第三步也是最后一步。

    - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
        NSString *URLString = [[request URL] absoluteString];
        if ([URLString isEqualToString:@"http://www.example.com/step3.htm"]) {
            // The user reached step 3!
        }
        return YES;
    }
    

    请注意,使用absoluteString 方法可能不是找出用户浏览位置的最佳方法。看看querypathparameterString等...

    【讨论】:

    • 哦,不知怎的,我错过了。谢谢,这正是我一直在寻找的!
    • 有没有办法在新页面完成加载时得到通知? (此方法在开始加载之前被调用)
    • 要完成它,您需要将委托委托给 webView: 在 ViewController.m 中: self.myWeview.delegate = self;在 ViewController.h 中:@interface ViewController : UIViewController
    【解决方案2】:

    在 Swift 4 中

    func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
    
        if request.url?.absoluteString == "http://www.example.com/step3.htm" {
            // The user reached step 3!
        }
    
        return true
    }
    

    【讨论】:

      猜你喜欢
      • 2019-08-14
      • 1970-01-01
      • 2016-12-18
      • 1970-01-01
      • 2013-04-27
      • 2011-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多