【问题标题】:How to satisfy this use case effectively?如何有效地满足这个用例?
【发布时间】:2023-03-19 23:48:01
【问题描述】:

我有一个使用 Python 和 Flask 编写的网络应用程序。此 Web 应用程序仅在用户连接到内部 VPN 时运行。现在假设用户已连接到 Internet 和 VPN,并且正在浏览 Web 应用程序并且他的 VPN 断开连接。在这种情况下,他将无法再访问 Web 应用程序。我想通过我的应用通知用户再次连接他的 VPN。我编写了一个 Javascript,其中我正在对应用程序进行 HEAD ajax 调用,并根据响应的状态判断他是否连接到 VPN。下面是两个函数。

function isConnectedToVpn(){
    var xhr = new (window.ActiveXObject || XMLHttpRequest)("Microsoft.XMLHTTP");
    var status;
    xhr.open("HEAD", "//" + window.location.hostname , false);
    try{
        xhr.send();
        return (xhr.status >= 200 && (xhr.status < 300 || xhr.status === 304));
    }catch (error){
       return false;
    }
}

function isOnline()
{
    return navigator.onLine;
}

现在我怎样才能让最终用户下载这个 JS,然后运行它直到他的整个会话,并在站点无法连接时提醒他。此外,例如,如果他连接到 VPN 并且应用程序中存在真正的问题,我将如何减少误报。任何指针都会很有用。

【问题讨论】:

    标签: javascript python node.js web-applications vpn


    【解决方案1】:

    把你的js代码放到静态文件夹,然后把你的js代码改成isOnline

    document.onload = function isOnline()
    {
        if !(isConnectedToVpn())
        {
            alert('Your not connected to the VPN');
        }
    }
    

    现在让你的所有模板都继承自一个导入 js 的主 (base.html) 模板:

    在 base.html 上

    `<script src="{{url_for('yourapp.static',filename='js/yourjsfile.js')}}"></script>`
    

    在你所有的模板上放这个:

    {% extends "yourapp/base.html" %}
    ..
    ..
    ..
    

    【讨论】:

    • 但是如果我的浏览器没有连接VPN,页面不显示,那么JS将如何下载和执行。我已将所有 JS 放在 body 标记之后,并验证它们确实被缓存了,但这仍然不执行脚本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多