Xcode Wkwebview 未加载
Xcode Wkwebview not Loading
我有一个带有 Webview
和 TabBar
的 Xcode 项目,通过 TabBar,我可以在 WebView 之间切换。
我的问题是,当我在 lieferworld.de 下的 ShoppingCard 中放入一些东西并使用 TabBar 切换到我的购物卡 url 时,其中的项目不可见。我该如何解决这个问题? ShoppingCard URL 以 .php 结尾。下面是实现的代码
这里还有一个视频,您可以看到错误:
查看主页:
import UIKit
import WebKit
class viewHome: UIViewController, WKUIDelegate {
@IBOutlet var webViewHome: WKWebView!
override func loadView() {
let webConfiguration = WKWebViewConfiguration()
webViewHome = WKWebView(frame: .zero, configuration: webConfiguration)
webViewHome.uiDelegate = self
webViewHome.configuration.preferences.javaScriptEnabled = true
//webViewHome.configuration.preferences.javaEnabled = true
view = webViewHome
}
override func viewDidLoad() {
super.viewDidLoad()
let url = URL(string: "https://lieferworld.de")
let request = URLRequest(url: url!)
webViewHome.configuration.preferences.javaScriptEnabled = true
//webViewHome.configuration.preferences.javaEnabled = true
webViewHome.load(request)
}
@IBAction func GoBackHome(_ sender: Any) {
if webViewHome.canGoBack {
webViewHome.goBack()
}
}
@IBAction func GoForwardHome(_ sender: Any) {
if webViewHome.canGoForward {
webViewHome.goForward()
}
}
}
查看购物 |购物车Class:
import UIKit
import WebKit
class viewShopping: UIViewController, WKUIDelegate {
@IBOutlet var webViewShopping: WKWebView!
override func loadView() {
let webConfiguration = WKWebViewConfiguration()
webViewShopping = WKWebView(frame: .zero, configuration: webConfiguration)
webViewShopping.uiDelegate = self
//webViewShopping.configuration.preferences.javaEnabled = true
webViewShopping.configuration.preferences.javaScriptEnabled = true
view = webViewShopping
}
override func viewDidLoad() {
super.viewDidLoad()
let url = URL(string: "https://lieferworld.de/warenkorb.php")
let request = URLRequest(url: url!)
webViewShopping.configuration.preferences.javaScriptEnabled = true
//webViewShopping.configuration.preferences.javaEnabled = true
webViewShopping.load(request)
}
@IBAction func goBackShoppingCart(_ sender: Any) {
if webViewShopping.canGoBack {
webViewShopping.goBack()
}
}
@IBAction func goForwardShoppingCart(_ sender: Any) {
if webViewShopping.canGoForward {
webViewShopping.goForward()
}
}
@IBAction func webViewRefresh(_ sender: Any) {
webViewShopping.reload()
}
}
您的数据未在两个 UIViewController 之间共享,因为您的 WKWebView 是彼此的不同实例并且不共享相同的数据。就好像您在 Web 浏览器中打开了两个不同的选项卡一样。如果您已登录,并且购物车数据存储在服务器上,那么如果您刷新购物车页面,它应该可以工作。如果它是基于 cookie 的,则需要确保这些 cookie 在两个 web 视图中是通用的。相反,使用选项卡重定向到购物车页面而不是创建新的 View Controller 实例,或者将 WKWebView 的实例放入可在两个选项卡之间共享的静态变量中。您必须对该视图做一些 hiding/showing 操作,这样您就不会看到它正在加载,但这可以通过委托来处理。
如果数据存储在服务器上,您只需在 VC 中的 viewDidAppear() 重写函数中重新加载网页即可。这实际上取决于您的目的,但这些是一些有用的建议。
我有一个带有 Webview
和 TabBar
的 Xcode 项目,通过 TabBar,我可以在 WebView 之间切换。
我的问题是,当我在 lieferworld.de 下的 ShoppingCard 中放入一些东西并使用 TabBar 切换到我的购物卡 url 时,其中的项目不可见。我该如何解决这个问题? ShoppingCard URL 以 .php 结尾。下面是实现的代码
这里还有一个视频,您可以看到错误:
查看主页:
import UIKit
import WebKit
class viewHome: UIViewController, WKUIDelegate {
@IBOutlet var webViewHome: WKWebView!
override func loadView() {
let webConfiguration = WKWebViewConfiguration()
webViewHome = WKWebView(frame: .zero, configuration: webConfiguration)
webViewHome.uiDelegate = self
webViewHome.configuration.preferences.javaScriptEnabled = true
//webViewHome.configuration.preferences.javaEnabled = true
view = webViewHome
}
override func viewDidLoad() {
super.viewDidLoad()
let url = URL(string: "https://lieferworld.de")
let request = URLRequest(url: url!)
webViewHome.configuration.preferences.javaScriptEnabled = true
//webViewHome.configuration.preferences.javaEnabled = true
webViewHome.load(request)
}
@IBAction func GoBackHome(_ sender: Any) {
if webViewHome.canGoBack {
webViewHome.goBack()
}
}
@IBAction func GoForwardHome(_ sender: Any) {
if webViewHome.canGoForward {
webViewHome.goForward()
}
}
}
查看购物 |购物车Class:
import UIKit
import WebKit
class viewShopping: UIViewController, WKUIDelegate {
@IBOutlet var webViewShopping: WKWebView!
override func loadView() {
let webConfiguration = WKWebViewConfiguration()
webViewShopping = WKWebView(frame: .zero, configuration: webConfiguration)
webViewShopping.uiDelegate = self
//webViewShopping.configuration.preferences.javaEnabled = true
webViewShopping.configuration.preferences.javaScriptEnabled = true
view = webViewShopping
}
override func viewDidLoad() {
super.viewDidLoad()
let url = URL(string: "https://lieferworld.de/warenkorb.php")
let request = URLRequest(url: url!)
webViewShopping.configuration.preferences.javaScriptEnabled = true
//webViewShopping.configuration.preferences.javaEnabled = true
webViewShopping.load(request)
}
@IBAction func goBackShoppingCart(_ sender: Any) {
if webViewShopping.canGoBack {
webViewShopping.goBack()
}
}
@IBAction func goForwardShoppingCart(_ sender: Any) {
if webViewShopping.canGoForward {
webViewShopping.goForward()
}
}
@IBAction func webViewRefresh(_ sender: Any) {
webViewShopping.reload()
}
}
您的数据未在两个 UIViewController 之间共享,因为您的 WKWebView 是彼此的不同实例并且不共享相同的数据。就好像您在 Web 浏览器中打开了两个不同的选项卡一样。如果您已登录,并且购物车数据存储在服务器上,那么如果您刷新购物车页面,它应该可以工作。如果它是基于 cookie 的,则需要确保这些 cookie 在两个 web 视图中是通用的。相反,使用选项卡重定向到购物车页面而不是创建新的 View Controller 实例,或者将 WKWebView 的实例放入可在两个选项卡之间共享的静态变量中。您必须对该视图做一些 hiding/showing 操作,这样您就不会看到它正在加载,但这可以通过委托来处理。
如果数据存储在服务器上,您只需在 VC 中的 viewDidAppear() 重写函数中重新加载网页即可。这实际上取决于您的目的,但这些是一些有用的建议。