【问题标题】:How to detect if a web page is running from a website or local file system?如何检测网页是从网站还是本地文件系统运行?
【发布时间】:2017-05-04 18:23:25
【问题描述】:

以前有人问过这个问题,但提供的答案都不正确。我不允许对原始问题(或答案)发表评论,因此我正在创建一个已向我建议的新问题。

How to detect if a web page is running from a website or local file system

我需要检测用户是否通过 Safari Web Archive 或通过正确的 Web url 访问了特定页面。

链接问题的答案均​​不适用于 Safari 网络档案。 接受的答案是这样的:

switch(window.location.protocol) {
   case 'http:':
   case 'https:':
     //remote file over http or https
     break;
   case 'file:':
     //local file
     break;
   default: 
     //some other protocol
}

但是,出于某种原因,Safari 网络存档文件的行为似乎就像在服务器上被远程访问一样。在测试位置协议时,它总是返回 http,而不是 file://

在 safari webarchive 中唯一不同的似乎是文件本身的 mimetype,即“application/x-webarchive”,但似乎没有可靠的方法来检测当前页面的 mime 类型。

我很想找到一个合适的解决方案来从远程访问的页面检测本地页面。

【问题讨论】:

    标签: javascript safari webarchive


    【解决方案1】:

    我知道这个问题已经很老了,但我也需要一个解决方案。在任何地方都没有找到好的答案之后,这是我经过大量测试后最终得出的结论。

    jQuery(document).ready(function () {
        // Check if the page is being loaded from a local cache
        if(jQuery('body').hasClass('localProtection')) {
            window.document.location = 'https://example.com/somepage/';
            return;
        } else {
            jQuery('body').addClass('localProtection');
        }
    });
    

    当页面最初从远程站点加载时,“localProtection”类被添加到正文元素中。如果页面随后由浏览器在本地保存,则该类与 body 元素一起保存。加载页面后,我们检查这个类是否已经存在并采取行动——在我的例子中,重定向回原始站点。这类似于 eFUSE 如何防止某些设备上的固件降级。

    这对我来说适用于 Safari、Chrome 和 Firefox。

    【讨论】:

      猜你喜欢
      • 2011-03-12
      • 1970-01-01
      • 2015-03-14
      • 1970-01-01
      • 2014-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多