js禁止访问网页无法判断,帮我看看

请大家帮我看看,是哪里错了。该代码居然无法判断的。写地国家后,运行还是显示百度,并不是显示走错地方的页面?


<script type="text/javascript" src="http://pv.sohu.com/cityjson?ie=utf-8"></script>
<script type="text/javascript">
if (! /日本|美国|印度/.test(returnCitySN.cname) ){
window.location.href='http://baidu.com/'
}else{
    document.write("大哥,你这是要到哪里去。走错地方了?")
};
</script>

没有一个可以完整写出来的吗?我想表达的是,写上国家了就显示走错地方,没有写上国家的就显示百度?

????????

将returnCitySN.cname 值打印出来看看,不属于(日本|美国|印度),又对其结果进行取反,所以执行的是if语句。

<script type="text/javascript" src="http://pv.sohu.com/cityjson?ie=utf-8"></script>
<script type="text/javascript">
alert(returnCitySN.cname)
if (! /日本|美国|印度/.test(returnCitySN.cname) ){
window.location.href='http://baidu.com/'
}else{
    document.write("大哥,你这是要到哪里去。走错地方了?")
};
</script>

returnCitySN.cname 获取的是当前访问者的国家/地区名称,而你的正则表达式是匹配 日本、美国、印度 这几个国家名称

前面有个取反(!),所以只要不是"日本|美国|印度"之一,都会跳转到百度

改成https试试
另外看下你的returnCitySN.cname是否有值

 
<script type="text/javascript" src="https://pv.sohu.com/cityjson?ie=utf-8"></script>


代码逻辑应该没啥问题,我这里测试sohu链接返回的内容是:

var returnCitySN={
    "cip": "127.0.0.1",
    "cid": "00",
    "cname": "未知"
};

没有匹配上,自然会执行跳转。请查看你的返回内容

看你的入参是啥

// 这个当returnCitySN.cname为日本、美国、印度中的某一个时为true
/日本|美国|印度/.test(returnCitySN.cname)

你console.log(returnCitySN.cname)看看会返回什么,我这里返回的是“未知”

你的正则写的不对应该是,建议这样写。 你正则前面加了个!(取反)


<script type="text/javascript" src="http://pv.sohu.com/cityjson?ie=utf-8"></script>
<script type="text/javascript">
  console.log(returnCitySN,"998")
  let arr=["日本","美国","印度"];
  if (returnCitySN&&returnCitySN.name&&arr.includes(returnCitySN.name)) { 
    window.location.href = 'http://baidu.com/'
  } else {
    document.write("大哥,你这是要到哪里去。走错地方了?")
  };
  //或者用 indexOf 因为includes可能有兼容性问题
  if (returnCitySN&&returnCitySN.name&&arr.indexOf(returnCitySN.name)>-1) { 
    window.location.href = 'http://baidu.com/'
  } else {
    document.write("大哥,你这是要到哪里去。走错地方了?")
  };
</script>

引用chatgpt内容作答:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Country Redirect</title>
    <script type="text/javascript" src="http://pv.sohu.com/cityjson?ie=utf-8"></script>
    <script type="text/javascript">
        function redirectToBaidu() {
            window.location.href = 'http://www.baidu.com/';
        }

        function showErrorMessage() {
            document.write("大哥,你这是要到哪里去。走错地方了?");
        }

        if (typeof returnCitySN !== 'undefined') {
            var countryName = returnCitySN.cname;
            if (!/日本|美国|印度/.test(countryName)) {
                redirectToBaidu();
            } else {
                showErrorMessage();
            }
        } else {
            // Fallback in case returnCitySN is not available
            redirectToBaidu();
        }
    </script>
</head>
<body>
    <p>This is the main content of the page.</p>
</body>
</html>

将上述代码保存为一个 HTML 文件,然后在浏览器中打开该文件。根据不同的 IP 地址和地理位置,代码会根据你的逻辑进行重定向或显示错误信息。如果 returnCitySN 对象不可用,代码会默认重定向到百度。在实际使用中,确保你的网页能够正常引入 http://pv.sohu.com/cityjson?ie=utf-8 这个 JavaScript 文件,并且 returnCitySN 对象是可用的。

哪里都没错

JavaScript 编写的,并不能直接在这个对话框中运行,因为这个对话框不支持 JavaScript 代码的执行。

<script type="text/javascript" src="http://pv.sohu.com/cityjson?ie=utf-8"></script>
<script type="text/javascript">
  if (!/日本|美国|印度/.test(returnCitySN.cname)) {
    window.location.href = 'http://baidu.com/';
  } else {
    document.write("大哥,你这是要到哪里去。走错地方了?");
  }
</script>

通过检测 returnCitySN.cname 是否包含 "日本"、"美国" 或 "印度",来执行不同的操作。如果不包含这些国家名称,将会重定向到百度页面;如果包含这些国家名称,将会显示提示信息。

很抱歉,您提供的信息不够详细,无法准确判断问题所在。可以尝试检查以下几点:

  1. 确认您的代码中有无语法错误。可以在控制台运行代码并查看是否报错。

  2. 确认您的代码中是否有正确的判断逻辑。例如,您可以使用if语句判断用户所在的地区,然后根据不同的地区跳转到不同的网页。示例代码如下:

if (navigator.language == "zh-CN") {
  window.location.href = "http://www.baidu.com";
} else {
  window.location.href = "http://www.google.com";
}
  1. 确认您的代码是否正确引入了jQuery库。如果您使用了jQuery库,请检查是否正确引入,以及版本是否兼容您的代码。

如果您提供更具体的问题描述和代码片段,我们可以更好地帮助您解决问题。

这个returnCitySN.cname 变量确定有值吗?使用正则表单时匹配确保变量是有值的

【以下回答由 GPT 生成】

这段代码存在一个问题,就是returnCitySN这个对象在脚本执行之前并没有被定义。因此,你需要先使用一个异步请求获取到IP地址所在的信息,然后再进行页面跳转。

以下是我给出的解决方案:

  1. 首先,在页面中添加一个空的<div>元素,用于存放IP地址信息:
<div id="ip-address"></div>
  1. 接下来,在JavaScript代码中,使用XMLHttpRequest对象向"http://pv.sohu.com/cityjson?ie=utf-8"发起一个HTTP GET请求,以获取IP地址信息。这里,我使用了ES6的fetch函数来发送请求:
fetch("http://pv.sohu.com/cityjson?ie=utf-8")
  .then(response => response.text())
  .then(data => {
    // 由于返回的数据是一个字符串,我们需要从中提取出有效的JSON对象
    const startIndex = data.indexOf("{");
    const endIndex = data.indexOf("}") + 1;
    const jsonData = JSON.parse(data.slice(startIndex, endIndex));

    // 接下来,获取到IP地址信息,并将其存放在之前创建的<div>元素中
    const ipAddressElement = document.getElementById("ip-address");
    ipAddressElement.textContent = JSON.stringify(jsonData);

    // 最后,检查国家信息并进行页面跳转
    const country = jsonData.cname;
    if (!/日本|美国|印度/.test(country)) {
      window.location.href = 'http://baidu.com/';
    } else {
      document.write("大哥,你这是要到哪里去。走错地方了?");
    }
  })
  .catch(error => {
    console.error(error);
  });

通过上述代码,首先发送异步请求获取到IP地址信息,接着将IP地址信息存放在HTML页面中,然后根据国家信息进行页面跳转。

请注意,上述代码需要在一个具有服务器支持的环境中运行,否则将因为跨域问题而无法获取到IP地址信息。

希望这个解决方案能够帮到你。如果你对某一步骤有任何疑问,请随时向我提问。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

你的代码

<script type="text/javascript" src="http://pv.sohu.com/cityjson?ie=utf-8"></script>

中的var returnCitySN = {"cip": "127.0.0.1", "cid": "00", "cname": "未知"};显示未知,不属于日本|美国|印度/,所以显示的是'http://baidu.com/%E3%80%82
你的下面的代码就是这个结果啊,没有问题啊!

if (! /日本|美国|印度/.test(returnCitySN.cname) ){
window.location.href='http://baidu.com/'
}else{
    document.write("大哥,你这是要到哪里去。走错地方了?")

根据提供的代码,它似乎无法正确判断国家并进行相应的重定向。这可能是由于代码中的条件判断逻辑存在问题。

一步一步log一下看看走哪里了

抱歉,您提供的代码不完整,无法确定问题所在。但是,如果您想禁止访问某些网站,可以使用以下代码块:

window.location.href='about:blank';

将代码块放在您不希望用户访问的网站的条件分支内即可。同时,您可以通过在网页头部添加meta标签的方式来防止被搜索引擎收录:

<meta name="robots" content="noindex, nofollow">

希望能对您有所帮助。

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>测试</title>
</head>
<body>
  <script type="text/javascript" src="http://pv.sohu.com/cityjson?ie=utf-8&callback=showCity"></script>
  <script type="text/javascript">
    function showCity(data) {
      if (! /^日本|美国|印度/.test(data.cname) ){
        window.location.href='http://baidu.com/'
      }else{
        document.getElementById("message").innerHTML = "大哥,你这是要到哪里去。走错地方了?";
      }
    }
  </script>
  <div id="message"></div>
</body>
</html>

cname打印出来的结果是未知,不满足日本|美国|印度条件,取反之后,所以就会跳转到百度页面。

img

把你的代码运行后报错了

img


这个错误是因为你的网页加载的是 HTTPS(安全的加密连接),但是请求的资源 http://pv.sohu.com/cityjson?ie=utf-8 是使用了 HTTP(非安全的连接),所以浏览器阻止了这个请求。

这是浏览器的一项安全措施,防止在安全的 HTTPS 页面中加载不安全的 HTTP 资源,以避免安全漏洞。

为了解决这个问题,你可以尝试以下几种方法:

  1. 将请求的资源改为 HTTPS:尝试使用 https://pv.sohu.com/cityjson?ie=utf-8 来加载资源。如果 pv.sohu.com 支持 HTTPS 协议,并且提供了相应的资源,那么这个错误就可以解决。

  2. 将网页本身也改为使用 HTTP:如果 pv.sohu.com 只能提供 HTTP 资源,并且你没有其他可用的 HTTPS 接口,那么你可以将你的网页也改为使用 HTTP。但请注意,将网页改为使用非安全的 HTTP 连接可能会降低用户的安全性和隐私。

  3. 使用其他接口:寻找其他提供类似城市信息的接口,且支持 HTTPS 连接。这样你就可以使用安全的 HTTPS 连接加载资源,避免浏览器的安全阻止。

请根据你的实际情况和需求选择合适的解决方案。

使用JS代码禁止某些地区用户访问网站
可以参考下


http://www.nndssk.com/xtjc/270234Y3twD9.html

returnCitySN.cname为空

这段代码有一些问题。首先,returnCitySN.cname并不是同步获取城市的函数,因此在if语句中直接判断它的值是不正确的。

以下是一个可能的解决方案:

<script type="text/javascript" src="http://pv.sohu.com/cityjson?ie=utf-8"></script>
<script type="text/javascript">
function getCountry(callback) {
  var script = document.createElement('script');
  script.type = 'text/javascript';
  script.src = 'http://pv.sohu.com/cityjson?ie=utf-8';
  script.onload = function() {
    callback(returnCitySN.cname);
  };
  document.getElementsByTagName('head')[0].appendChild(script);
}

getCountry(function(country) {
  if (!/日本|美国|印度/.test(country) ) {
    window.location.href = 'http://baidu.com/';
  } else {
    document.write("大哥,你这是要到哪里去。走错地方了?");
  }
});
</script>

以上代码通过创建一个新的script标签来异步加载城市信息,然后通过回调函数来获取并使用城市信息进行判断。如果不是日本、美国或印度,则重定向到百度,并在否则情况下显示指定的提示信息。

应该是你的这个returnCitySN.cname 的值的问题,你可以把returnCitySN.cname 的值console.log(returnCitySN.cname )输出来看看。应该是这个值不满足你的条件。

逐步console.log()出来看哪里不对

正则表达式写反了吧