我当前正在使用HTML
文件加载Web视图。网络功能在js
文件中处理。这不是问题。
但是我的问题是backButton。我检查是否有要返回的页面。因此,我们使用document.referrer
来显示使用现有服务器的Web视图。
但是它不起作用,因为它在创建iOS hybridApp
时在iOS内部使用。
因此,我检查了history.back()
是否有效。有用。有一个页面可以返回。
有些页面需要返回,但是document.referrer
无效。
location.href = './Detail.html'
Common.js
文件标题中的后退按钮功能 alert(document.referrer) // return empty
if (document.referrer) {
history.back();
} else {
location.href = "./Main.html"; // only can do
}
Common.js
文件中。我正在使用Swift5 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0,minimum-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover, shrink-to-fit=no">
<meta name="referrer" content="always">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0,minimum-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover, shrink-to-fit=no">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="referrer" content="always">
我们如何解决这个问题?
谢谢。
答案 0 :(得分:1)
我找到了另一个解决方案。这来自Navigating
中的WKWebView
。这使您可以像document.referrer
一样工作。
但是,由于这是WKWebView
的功能,因此需要js
和ios
之间的通信。
Common.js
文件标题中的后退按钮功能
var data = {
type : "backCheck",
callback : "backCheckCallback"
}
webkit.messageHandlers.sendMessageToIos.postMessage(data);
@available(iOS 8.0, *)
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
if message.name == "sendMessageToIos" {
let getMessage = message.body as! NSDictionary
guard getMessage["type"] != nil else {
return
}
let type : String = getMessage["type"] as! String
let callbackName : String = getMessage["callback"] as! String
if type == "backCheck" {
let backCheck = WKWebView.canGoBack
self.WKWebView.evaluateJavaScript("\(callbackName)(\(backCheck))", completionHandler: { (any, err) -> Void in
print(any ?? "no any")
print(err ?? "no Error")
})
}
function backCheckCallback(backCheck){
if(backCheck) {
history.back();
} else {
location.href = "./Main.html";
}
}
答案 1 :(得分:0)
现在我的问题已经解决,但这不是根本的解决方案。就我而言,我通过在接收到推送消息并移动页面时附加用于推送的参数来解决该问题。
webUrl = "Web/Detail?pram=pram" // current Url
webUrl = "\(webUrl!)&push=Y"
let splitData = webUrl.split(separator: "?")
var myReq : URLRequest!
let mainUrl : String = String(splitData[0])
let mainParameter : String = String(splitData[1])
let url1 = Bundle.main.url(forResource: mainUrl, withExtension: "html")!
let url2 = URL(string: "?" + mainParameter, relativeTo: url1)!
myReq = URLRequest(url: url2)
WKWebView.load(myReq)
if (getParameter("push") != "Y")) {
history.back();
} else {
location.href = "./Main.html"; // only can do
}
这可以解决问题,但我认为会有更好的解决方案。请在答案中给我写一个更好的解决方案。