首页 > 解决方案 > 问题是 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">

我们如何解决这个问题?

提前致谢。

标签: javascripthtmliosswift

解决方案


我找到了另一个解决方案。这是从Navigating. WKWebView这使您可以像document.referrer.

但是,由于这是 的函数,因此需要和WKWebView之间的通信。jsios

  1. 修改现有js的功能。

Common.js文件头中的后退按钮功能

var data = { 
           type : "backCheck",
           callback : "backCheckCallback"
       }
webkit.messageHandlers.sendMessageToIos.postMessage(data);
  1. 在 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")
                        })
        }
  1. 在js文件中配置回调函数
function backCheckCallback(backCheck){
  if(backCheck) {
    history.back();
  } else {
    location.href = "./Main.html";
  }
}

推荐阅读