javascript - 问题是 document.referrer 不工作
问题描述
我目前正在使用HTML
文件加载 Web 视图。Web 功能在js
文件中处理。这不是问题。
但我的问题是后退按钮。我检查是否有要返回的页面。所以我们过去document.referrer
常常使用现有的服务器来显示 webviews。
但它不起作用,因为它在创建 iOS 时在 iOS 内部使用hybridApp
。
所以我检查了是否history.back()
有效。有用。有一个页面可以返回。
有些页面需要返回,但document.referrer
无法正常工作。
在 html 中从主页移动到详细页面包含 js 文件
location.href = './Detail.html'
Common.js
文件头中的后退按钮功能
alert(document.referrer) // return empty
if (document.referrer) {
history.back();
} else {
location.href = "./Main.html"; // only can do
}
两个 html 文件(Main,Detail)使用一个共同的标题。该函数在Common.js
文件中。我正在使用 Swift5
主.html
<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">
细节.html
<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">
我们如何解决这个问题?
提前致谢。
解决方案
我找到了另一个解决方案。这是从Navigating
. WKWebView
这使您可以像document.referrer
.
但是,由于这是 的函数,因此需要和WKWebView
之间的通信。js
ios
- 修改现有js的功能。
Common.js
文件头中的后退按钮功能
var data = {
type : "backCheck",
callback : "backCheckCallback"
}
webkit.messageHandlers.sendMessageToIos.postMessage(data);
- 在 ios 中接收消息
@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")
})
}
- 在js文件中配置回调函数
function backCheckCallback(backCheck){
if(backCheck) {
history.back();
} else {
location.href = "./Main.html";
}
}
推荐阅读
- samsung-smart-tv - 如何编译TAL项目(SMART TV)?
- katalon-studio - 如何从表中的特定列中提取数据,然后使用循环将其分配给变量数组?
- amazon-s3 - ffmpeg h.246 在 Safari 中本地播放,但在托管在 s3 存储桶上时不播放
- javascript - D3plus最大矩形需要什么格式的多边形?
- angular - Angular 4 - 显示复杂的 Json 值
- tensorflow - 没有 NCCL 的 MirroredStrategy
- asp.net-core - 从 aspnet 核心应用程序到 cloudwatch 的详细应用程序日志
- javascript - 第三方脚本设置第一方 cookie
- sql - T-SQL WHERE NOT EXISTS - 结果不一致
- java - 我可以使用默认的 TestNG 线程框架在循环内进行线程处理吗?