当前位置: 首页 > 面试题库 >

如何检测WKWebview更改功放页面的URL

白光耀
2023-03-14
问题内容

我正在使用WKWebview开发简单的Web浏览器。我可以检测到SPA时url是否更改,例如trello带有自定义Javascript。

这种方式在放大器页面不起作用。(Google的“加速移动网页”)我尝试print("webView.url")使用所有WKNavigationDelegate功能,但无法检测到的变化amp page url

但是webView具有amp页面网址,我想将amp页面网址保存到本地存储。


问题答案:

同样的问题。不幸的是,WKWebView仅在整个页面加载发生时才触发其功能。

因此,我们要做的是在WebKit.url属性上使用键值观察。

看起来像这样:

import AVFoundation
import UIKit
import WebKit
import MediaPlayer

class ViewController: UIViewController, WKNavigationDelegate {
  @IBOutlet weak var webView: WKWebView!

  override func viewDidLoad() {
    super.viewDidLoad()

    webView.navigationDelegate = self

    self.webView.addObserver(self, forKeyPath: "URL", options: .new, context: nil)
    self.webView.addObserver(self, forKeyPath: "estimatedProgress", options: .new, context: nil)

    self.webView.load(URLRequest(url: "https://google.com"))
  }

  override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
    if keyPath == #keyPath(WKWebView.url) {
      print("### URL:", self.webView.url!)
    }

    if keyPath == #keyPath(WKWebView.estimatedProgress) {
      // When page load finishes. Should work on each page reload.
      if (self.webView.estimatedProgress == 1) {
        print("### EP:", self.webView.estimatedProgress)
      }
    }
  }

wkWebkitView中的每个其他导航都应引起“ ### URL”和“ ### EP”的新组合触发。



 类似资料:
  • 问题内容: WKWebView类是否具有一个函数,可让您检测该WebView的URL是否已更改? 使用WebView中的某些元素时,and 函数似乎并不总是会触发。 编辑: 尝试添加一个通知观察器。到目前为止,这是我所拥有的: 问题答案: 您是什么意思,他们似乎并不总是会开除?什么样的元素?他们必须为了WkWebView起作用。 该URL试图更改的第一个迹象是在:DecisionPolicyFor

  • 是否有一种方法可以在每次文件更改时以某种方式触发一个事件?我是指类似的东西(在伪代码中) 我知道我可以周期性地做,但我能在没有计时器的情况下做吗?我希望在用户更新txt文件时(不是通过代码,而是通过打开文件并在里面写入)能够做出一些动作,但我不知道他什么时候会这么做。

  • 问题内容: 什么字体确实和默认情况下使用?我希望能够改变这一点。但我不想在html字符串中执行此操作,相反,我想要执行以下操作: 有这样的财产或其他方式吗? 问题答案: 您可以使用您的对象(这样您就可以更轻松地设置和修改对象),但是可以将HTML换成一个; 从HTML 4.01 开始,不推荐使用 标记。 假设您已经创建了,可以使用字体的属性: 另外,您可以只提供值,而不使用对象:

  • 我有一个带有子组件的组件。 在时间轴组件中,我有这些属性: 如何检查何时从时间轴组件对属性进行更改?每当编辑值发生更改时,我都需要发出该值。 我应该为编辑属性使用一个setter,然后从那里发出吗? 或者有其他方法吗?

  • 问题内容: 在Angular 1中,通过检查$ scope层次结构来进行更改检测。我们将在模板,控制器或组件中隐式或显式创建观察者。 在Angular 2中,我们不再具有$ scope,但是我们确实覆盖了setInterval,setTimeout等。我可以看到Angular如何使用它来触发$ digest,但是Angular如何确定发生了什么变化,特别是考虑到Object.observe从未进入

  • 我正在用ExoPlayer 2在Android上开发视频播放器 我正在寻找在SubtitleView(屏幕上部)中检测字幕更改的方法,以在TextView(屏幕下部)中自动滚动字幕<似乎没有听众这么做<我试了几个听众的字幕,但没有效果<你有什么想法吗