Javascript 如何检测网页是否从网站或本地文件系统运行?

Javascript 如何检测网页是否从网站或本地文件系统运行?,javascript,safari,webarchive,Javascript,Safari,Webarchive,这个问题以前有人问过,但提供的答案都不正确。我不允许对原始问题(或答案)发表评论,因此我正在创建一个新问题,正如建议我的那样 我需要检测用户是否通过Safari Web存档访问了特定页面,或者访问了正确的Web url 有关链接问题的答案都不适用于Safari webarchives。 公认的答案是: switch(window.location.protocol) { case 'http:': case 'https:': //remote file over htt

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

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

有关链接问题的答案都不适用于Safari webarchives。 公认的答案是:

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,从不返回文件://

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


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

我知道这个问题非常古老,但我也需要一个解决方案。在任何地方都找不到好答案后,这就是我经过大量测试后得出的结论

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');
    }
});
最初从远程站点加载页面时,body元素中添加了一类“localProtection”。如果该页面随后由浏览器本地保存,则该类将与body元素一起保存。加载页面后,我们检查这个类是否已经存在,并采取措施——在我的例子中,重定向回原始站点。这类似于eFUSE如何防止某些设备上的固件降级

对我来说,这在Safari、Chrome和Firefox上都有效