【问题标题】:iOS WKWebView Swift javascript enableiOS WKWebView Swift javascript 启用
【发布时间】:2017-10-31 13:47:49
【问题描述】:

我正在尝试开发一个简单的应用程序来浏览我的网站。但是,我的网站包含一些 javascript,但无法成功显示我的网站。

过去使用android开发相同的应用程序并且必须像这样激活:

webSettings.setJavaScriptEnabled(true);

这是我目前的代码,我只是缺少启用 javascript 的选项,如果有人可以提供帮助,我将不胜感激

import WebKit

class ViewController: UIViewController {

  @IBOutlet weak var webView: WKWebView!

  override func viewDidLoad() {
    super.viewDidLoad()
    let url = URL(string: "http://132.148.136.31:8082")
    let urlRequest = URLRequest(url: url!)

    webView.load(urlRequest)
  }
}

【问题讨论】:

    标签: ios swift web view wkwebview


    【解决方案1】:

    使用WKWebView 更好地从代码中创建它。您可以将javaScriptEnabled 设置为配置

    let preferences = WKPreferences()
    preferences.javaScriptEnabled = true
    let configuration = WKWebViewConfiguration()
    configuration.preferences = preferences
    let webview = WKWebView(frame: .zero, configuration: configuration)
    

    更新。这是视图控制器类中的 WKWebView:

    import UIKit
    import WebKit
    
    class ViewController: UIViewController {
    
        private var webView: WKWebView!
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            let preferences = WKPreferences()
            preferences.javaScriptEnabled = true
            let configuration = WKWebViewConfiguration()
            configuration.preferences = preferences
            webView = WKWebView(frame: view.bounds, configuration: configuration)
            view.addSubview(webView)
        }
    }
    

    【讨论】:

    • 你如何实现这个?如果我在视图控制器类中这样做,我会遇到很多错误
    • @lusito92 我已经更新了我的答案。它对我很有效(Xcode 9.0.1,Swift 4)。你有什么错误?
    • 我更新了,但仍然无法使用 javascript 查看顶部的更新,请让我知道非常感谢
    • @lusito92 我已经用google.com 仔细检查过了。有用!使用.javaScriptEnabled = true 我可以打开侧边栏,如果false - 我不能。您确定 JavaScript 可以通过 URL 132.148.136.31:8082 在您的页面上运行吗?您在 Safari 中尝试过吗?您还可以在 Mac 上的 Safari 中使用连接的设备调试 webview。
    • 它对我不起作用。单击 web 视图中的按钮/文本字段时,有一个功能可以显示自动填充下拉菜单。启用javascript后在android上运行良好。但即使我按照上面的代码启用了 javascript,它对我也不起作用。任何解决方案..?将不胜感激。谢谢..!
    【解决方案2】:

    对于那些使用 Swift 5 和 Xcode 12 为 iOS 14 构建的用户,它已更改为以下内容...

    webView.configuration.defaultWebpagePreferences.allowsContentJavaScript = true
    

    【讨论】:

    • 这对我不起作用,它仍然显示我的浏览器(webview)中禁用了js
    【解决方案3】:

    您正在使用 WKWebView 故事板视图,因此您可以直接访问配置。所以在你的 WKWebView 配置下使用首选项。

    import WebKit
    
    class ViewController: UIViewController {
    
      @IBOutlet weak var webView: WKWebView!
    
      override func viewDidLoad() {
        super.viewDidLoad()
        let url = URL(string: "http://132.148.136.31:8082")
        let urlRequest = URLRequest(url: url!)
    
        // enable JS
        webView.configuration.preferences.javaScriptEnabled = true
        webView.load(urlRequest)
      }
    }
    

    【讨论】:

    • 语法更简洁!
    • @Md Imran Choudhury 如何检查我的 JS 是否已成功加载。
    • 您可以设置任何JS动作到您的网站进行检查。
    • 是的,我已经编写了 JS 函数来在我的 swift 类中显示和评估它正在工作。但在我的情况下,javascript 没有调用是因为我们在 HTML 中设置的脚本路径吗?是不是因为JS接口没有调用?
    • @MdImranChoudhury 当我将脚本注入我的 WKWebview 时,只有在加载 HTML 后我才能显示“JS Alert”。已解决问题!
    【解决方案4】:

    上面的答案是对的,你需要将此值设置为 true 才能启用 JavaScript。

    webView.configuration.preferences.javaScriptEnabled = true
    

    但如果 JS 脚本来自非 HTTPS 源,那么您需要允许 “App Transport Security's Arbitrary Loads”

    解决方法如下:

    1. 导航到项目设置/目标/[您的应用的目标]/信息。
    2. 检查是否有名为“应用传输安全设置”的字典。如果没有,请创建它。
    3. 在其中创建一个名为 Allow Arbitrary Loads 的布尔值(如果还没有的话)并将其设置为 YES。

    【讨论】:

    • 'javaScriptEnabled' 在 iOS 14.0 中已被弃用:使用 WKWebPagePreferences.allowsContentJavaScript 在每次导航的基础上禁用内容 JavaScript
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-07
    • 2019-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多