iOS WKWebView Swift JavaScript enable

yhxst69z  于 5个月前  发布在  Swift
关注(0)|答案(7)|浏览(83)

我试图开发一个简单的应用程序来浏览我的网站。然而,我的网站包含一些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)
    }
}

fumotvh3

fumotvh31#

对于那些使用Swift 5和Xcode 12构建iOS 14的人来说,它已经更改为以下内容。

webView.configuration.defaultWebpagePreferences.allowsContentJavaScript = true

字符串

dxpyg8gm

dxpyg8gm2#

使用WKWebView最好从代码中创建。您可以将javaScriptEnabled设置为configuration

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)
    }
}

ru9i0ody

ru9i0ody3#

您正在使用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)
  }
}

字符串

0ve6wy6x

0ve6wy6x4#

上面的答案是正确的,您需要将此值设置为true以启用JavaScript。

webView.configuration.preferences.javaScriptEnabled = true

字符串
但如果JS脚本来自非HTTPS源,则需要允许**“App Transport Security's Arbitrary Loads”**。
下面是如何解决这个问题:
1.导航到项目设置/目标/[您的应用的目标]/信息。
1.检查是否存在名为应用传输安全设置的字典。如果没有,请创建它。
1.在其中,创建一个名为Allow Arbitrary Loads的布尔值(如果还没有的话),并将其设置为YES。
x1c 0d1x的数据

lc8prwob

lc8prwob5#

iOS 15.5
添加此

webView.configuration.defaultWebpagePreferences.allowsContentJavaScript = true

字符串

wnavrhmk

wnavrhmk6#

如果你查看javaScriptEnabledallowsContentJavaScript的官方文档,它说:
The default value of this property is true.
所以,如果你没有在其他地方禁用它,你甚至不需要写这个。

但是,如果您需要为WKWebView启用JavaScript,请按以下方式操作:

iOS 14及以上版本:

webView.configuration.defaultWebpagePreferences.allowsContentJavaScript = true

字符串

iOS 13及以下:
webView.configuration.preferences.javaScriptEnabled = true

ugmeyewa

ugmeyewa7#

试试这个代码:

override func viewDidLoad() {
    super.viewDidLoad()
    configureWebView()
    currentWebView.load(requestURL)
}

private func configureWebView() {
    webView.navigationDelegate = self
    webView.uiDelegate = self
    webView.allowsBackForwardNavigationGestures = true
    /// javaScript 사용 여부
    if #available(iOS 14, *) {
        let preferences = WKWebpagePreferences()
        preferences.allowsContentJavaScript = true
        webView.configuration.defaultWebpagePreferences = preferences
    }
    else {
        webView.configuration.preferences.javaScriptEnabled = true
        /// user interaction없이 윈도우 창을 열 수 있는지 여부를 나타냄. iOS에서는 기본값이 false이다.
        webView.configuration.preferences.javaScriptCanOpenWindowsAutomatically = true
    }
}

func createNewWebView(_ config: WKWebViewConfiguration) -> WKWebView {
    /// autoLayout 되어 있는 webView와 frame을 같게 한다.
    let newWebView = WKWebView(frame: webView.frame,
                               configuration: config)
    newWebView.navigationDelegate = self
    newWebView.uiDelegate = self
    newWebView.allowsBackForwardNavigationGestures = true
    view.addSubview(newWebView)
    popupWebViews.append(newWebView)
    return newWebView
}

字符串

相关问题