2

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

如何检测网页是从网站还是本地文件系统运行

我需要检测用户是否通过 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 webarchive 文件的行为似乎就像在服务器上远程访问它们一样。在测试位置协议时,它总是返回 http,而不是 file://

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

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

4

1 回答 1

0

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

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。

于 2019-07-28T22:14:07.860 回答