添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

WKWebView 的navigationDelegate方法含义

// 页面开始加载时调用
    func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
    // 当内容开始返回时调用
    func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) {
    // 页面加载完成之后调用
    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
    // 页面加载失败时调用
    func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) {
    // 接收到服务器跳转请求之后调用
    func webView(_ webView: WKWebView, didReceiveServerRedirectForProvisionalNavigation navigation: WKNavigation!) {
    // 在收到响应后,决定是否跳转 -> 默认允许
    func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void) {
        //允许跳转
        decisionHandler(.allow)
        //不允许跳转
//        decisionHandler(.cancel)
    // 在发送请求之前,决定是否跳转 -> 默认允许
    func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, preferences: WKWebpagePreferences, decisionHandler: @escaping (WKNavigationActionPolicy, WKWebpagePreferences) -> Void) {
        decisionHandler(.allow, preferences)
                    WKWebView 的navigationDelegate方法含义// 页面开始加载时调用    func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {            }    // 当内容开始返回时调用    func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) 
一个包含WKWebView SwiftUI组件View
 由于WKWebView处理大量自己的状态,导航堆栈等,因此将其视为可变数据模型几乎容易WKWebView 。 您可以先设置它,然后再在SwiftUI视图中使用它的数据。
 只需启动一个WebViewStore (可选地使用您自己的WKWebView ),然后使用它来访问WKWebView本身,就好像它是数据模型一样。
 用法示例: 
 import SwiftUI
import WebView
struct ContentView : View {
  @StateObject var webViewStore = WebViewStore ()
  var body: some View {
    NavigationView {
      WebView ( webView : webViewStore. webV
//但如果这么写了的话, 需要在dealloc中把代理置nil: _wkWebView.scrollView.delegate = nil;否则会崩溃
_wkWebView.scrollView.delegate = self;
之前有引用到WKWebview,为使用方便将WKWebvi.
				
实现 JSBridge 的关键是在原生的 WKWebView 中添加 JavaScript,使之能够被调用并处理传递的数据。以下是一个简单的 Swift 版本的实现: 1. 在原生代码中添加 JavaScript ```swift // WKWebView 初始化 let webView = WKWebView(frame: .zero, configuration: WKWebViewConfiguration()) // 注入 JavaScript 脚本 let jsScript = "window.webkit.messageHandlers.jsBridge.postMessage" let userScript = WKUserScript(source: jsScript, injectionTime: .atDocumentEnd, forMainFrameOnly: false) webView.configuration.userContentController.addUserScript(userScript) // 添加消息处理器 webView.configuration.userContentController.add(self, name: "jsBridge") 2. 实现 WKScriptMessageHandler 协议 使用 WKScriptMessageHandler 协议来接收从 JavaScript 中传递的消息。在 Swift 中,需要使用 `@objc` 来声明方法。 ```swift extension ViewController: WKScriptMessageHandler { func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) { if message.name == "jsBridge" { // 处理传递的数据 let data = message.body as? [String: Any] // ... 3. 在 JavaScript 中实现调用 在 JavaScript 中使用 `window.webkit.messageHandlers.jsBridge.postMessage(data)` 来将数据传递给原生代码。以下是一个示例: ```javascript // 发送数据给原生代码 window.webkit.messageHandlers.jsBridge.postMessage({ action: "showAlert", data: { message: "Hello from JavaScript!" 通过以上步骤,就可以在 Swift 中实现一个简单的 JSBridge。
不对啊,不让我用 arch -x86_64,提示我类型不对: 先执行了 arch -x86_64 $SHELL 再执行:sudo arch -x86_64 gem install ffi,就报错: arch: posix_spawnp: gem: Bad CPU type in executable M1上模拟器无法运行的项目,可以用Rosetta打开 电脑版微信怎么双开、多开 m0_59705576: 试了没用呢 每次 git push 都要输入 ssh/id_rsa 的密码解决方法 Alan_kk: