iOS WKWebView Swift JavaScript enable

yhxst69z  于 2024-01-05  发布在  Swift
关注(0)|答案(7)|浏览(195)

我试图开发一个简单的应用程序来浏览我的网站。然而,我的网站包含一些JavaScript,它不能成功显示我的网站。
在过去的Android开发中,相同的应用程序是这样启用的:

  1. webSettings.setJavaScriptEnabled(true);

字符串
这是我现在的代码,我缺少启用JavaScript的选项:

  1. import WebKit
  2. class ViewController: UIViewController {
  3. @IBOutlet weak var webView: WKWebView!
  4. override func viewDidLoad() {
  5. super.viewDidLoad()
  6. let url = URL(string: "http://132.148.136.31:8082")
  7. let urlRequest = URLRequest(url: url!)
  8. webView.load(urlRequest)
  9. }
  10. }

fumotvh3

fumotvh31#

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

  1. webView.configuration.defaultWebpagePreferences.allowsContentJavaScript = true

字符串

dxpyg8gm

dxpyg8gm2#

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

  1. let preferences = WKPreferences()
  2. preferences.javaScriptEnabled = true
  3. let configuration = WKWebViewConfiguration()
  4. configuration.preferences = preferences
  5. let webview = WKWebView(frame: .zero, configuration: configuration)

字符串

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

  1. import UIKit
  2. import WebKit
  3. class ViewController: UIViewController {
  4. private var webView: WKWebView!
  5. override func viewDidLoad() {
  6. super.viewDidLoad()
  7. let preferences = WKPreferences()
  8. preferences.javaScriptEnabled = true
  9. let configuration = WKWebViewConfiguration()
  10. configuration.preferences = preferences
  11. webView = WKWebView(frame: view.bounds, configuration: configuration)
  12. view.addSubview(webView)
  13. }
  14. }

展开查看全部
ru9i0ody

ru9i0ody3#

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

  1. import WebKit
  2. class ViewController: UIViewController {
  3. @IBOutlet weak var webView: WKWebView!
  4. override func viewDidLoad() {
  5. super.viewDidLoad()
  6. let url = URL(string: "http://132.148.136.31:8082")
  7. let urlRequest = URLRequest(url: url!)
  8. // enable JS
  9. webView.configuration.preferences.javaScriptEnabled = true
  10. webView.load(urlRequest)
  11. }
  12. }

字符串

展开查看全部
0ve6wy6x

0ve6wy6x4#

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

  1. 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
添加此

  1. webView.configuration.defaultWebpagePreferences.allowsContentJavaScript = true

字符串

wnavrhmk

wnavrhmk6#

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

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

iOS 14及以上版本:

  1. webView.configuration.defaultWebpagePreferences.allowsContentJavaScript = true

字符串

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

展开查看全部
ugmeyewa

ugmeyewa7#

试试这个代码:

  1. override func viewDidLoad() {
  2. super.viewDidLoad()
  3. configureWebView()
  4. currentWebView.load(requestURL)
  5. }
  6. private func configureWebView() {
  7. webView.navigationDelegate = self
  8. webView.uiDelegate = self
  9. webView.allowsBackForwardNavigationGestures = true
  10. /// javaScript 사용 여부
  11. if #available(iOS 14, *) {
  12. let preferences = WKWebpagePreferences()
  13. preferences.allowsContentJavaScript = true
  14. webView.configuration.defaultWebpagePreferences = preferences
  15. }
  16. else {
  17. webView.configuration.preferences.javaScriptEnabled = true
  18. /// user interaction없이 윈도우 창을 열 수 있는지 여부를 나타냄. iOS에서는 기본값이 false이다.
  19. webView.configuration.preferences.javaScriptCanOpenWindowsAutomatically = true
  20. }
  21. }
  22. func createNewWebView(_ config: WKWebViewConfiguration) -> WKWebView {
  23. /// autoLayout 되어 있는 webView와 frame을 같게 한다.
  24. let newWebView = WKWebView(frame: webView.frame,
  25. configuration: config)
  26. newWebView.navigationDelegate = self
  27. newWebView.uiDelegate = self
  28. newWebView.allowsBackForwardNavigationGestures = true
  29. view.addSubview(newWebView)
  30. popupWebViews.append(newWebView)
  31. return newWebView
  32. }

字符串

展开查看全部

相关问题