如何使用JavaScript确定用户是在内部网络还是外部网络中


How to determine with JavaScript, if the user is in internal or external Network?

我有一个带有JavaScript的按钮,它"调用"php文件。该网站可从内部网络和万维网访问。

如果我从www点击按钮,php就不工作了,因为JavaScript中的地址是内部192.168.x.x地址。

function doSomething(id)
{
            var url ="http://192.168.1.1/phpfile.php?id" +id;
            var win = window.open(url, '_blank');
                if(win){
                    //Browser has allowed it to be opened
                    win.focus();
                }
                else
                {
                    //Broswer has blocked it
                    alert('Please allow popups for this site');
                }
}

是否可以区分呼叫是来自内部网络还是来自其他网络?

在另一个例子(php)中,我使用if-else来解决问题

((substr($_SERVER['REMOTE_ADDR'],0,8) == "192.168.") ||($_SERVER['REMOTE_ADDR'] == "127.0.0.1")) 
? 'http://internal/address/' : 'http://my.external.de/''

据我所知,您希望您的网站在本地使用localhost/192.168.x.x/127.0.0.1或在远程web服务器上工作,并区分您的配置,以便您的javascript能够正确地从一个配置切换到另一个配置。

首先,你不能直接从javascript中获取你的IP地址,你需要使用一个中继网站:请参阅本线程了解答案。

但是,在你的情况下,我相信有一种更简单的方法可以继续,而且没有任何"如果"。Javascript(或浏览器)足够智能,可以为您路由呼叫。将您的代码更改为:

function doSomething(id)
{
        var url ="/phpfile.php?id" +id;
        var win = window.open(url, '_blank');
            if(win){
                //Browser has allowed it to be opened
                win.focus();
            }
            else
            {
                //Broswer has blocked it
                alert('Please allow popups for this site');
            }
}

如果加载了运行脚本的页面,客户端浏览器将自动从localhost将调用路由到localhost。如果加载了运行脚本的页面,则从my.external.de.

路由到my.external.de

如果按钮和JavaScript代码位于从同一服务器交付的HTML页面中,则它可以在交付该页面之前测试并设置正确的值。

$PREFIX = ((substr($_SERVER['REMOTE_ADDR'],0,8) == "192.168.") ||($_SERVER['REMOTE_ADDR'] == "127.0.0.1")) ? 'http://internal/address/' : 'http://my.external.de/''

function doSomething(id) { var url ="<?=PREFIX?>phpfile.php?id" +id; ....