javascript - innerHTML 不接受检索到的变量

标签 javascript

我正在尝试 ipify 中的示例获取客户端IP:

<script type="application/javascript">
  function getIP(json) {
    document.write("My public IP address is: ", json.ip);
  }
</script>

<script type="application/javascript" src="https://api.ipify.org?format=jsonp&callback=getIP"></script>

这很好用。

当我尝试将其添加到我的文档中时,没有出现任何内容:

JS

<script type="application/javascript">
var s$ = function(e) {return document.getElementById(e);};

function getIP(json) {
    s$('clientIP').innerHTML = json.ip;
}
</script>

<script type="application/javascript" src="https://api.ipify.org?format=jsonp&callback=getIP"></script>

HTML

<div>
    <p><label for="clientIP">clientIP</label><span id="clientIP"></span></p>
</div>

查看 Chrome 控制台,出现此错误:

Failed to load resource: net::ERR_BLOCKED_BY_CLIENT

不确定我理解为什么第一种方法有效,而第二种方法无效。

<div>
  <p><label for="clientIP">clientIP</label><span id="clientIP"></span></p>
</div>
<script type="application/javascript">
  var s$ = function(e) {
    return document.getElementById(e);
  };

  function getIP(json) {
    s$('clientIP').innerHTML = json.ip;
  }
</script>

<script type="application/javascript" src="https://api.ipify.org?format=jsonp&callback=getIP"></script>

以隐身方式运行此程序,出现以下错误:

Uncaught TypeError: Cannot set property 'innerHTML' of null
    at getIP (VM26:10)
    at api.ipify.org/:1

Full HTML

最佳答案

这很可能是由于广告拦截器插件(例如 AdBlock plus)而发生的。要对此进行测试,请尝试在隐身模式下运行,或尝试在其他浏览器中运行它。

要永久修复此问题,您可以删除广告拦截器扩展程序。

我无法确定广告拦截器使用的确切算法,但第二个代码段中的某些内容正在触发广告拦截器“认为”它需要拦截该内容。

关于您的第二个问题(cannot set property of null),这很可能是因为您尝试引用的元素('clientIP')尚未呈现。这就是 jQuery 之类的东西非常有用的地方,因为您可以利用 document.ready 事件。这可确保您的代码 DOM 完成渲染后触发。按照您现在的方式(在第二个片段中),不能保证在代码执行时呈现 DOM。但是,如果没有 jQuery,您可以利用超时,并执行如下操作:

<script type="application/javascript">
var s$ = function(e) {return document.getElementById(e);};

function getIP(json) {
    setTimeout(function() {
        s$('clientIP').innerHTML = json.ip;
    }, 1000);
}
</script>

关于javascript - innerHTML 不接受检索到的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42477697/

相关文章:

javascript - 将点击事件绑定(bind)到Google自定义搜索中的 'search'按钮

javascript - 第一次点击后 href 不运行,但 onclick 运行

javascript - 锤子.js : How to handle/set tap and doubletap on same elements

javascript - 如何让函数调用先执行然后再执行后续代码?

javascript - 数据更改时 ng 类不刷新

javascript - 循环、异步/等待、createWriteStream 和延迟

javascript - 如何使用 django 将 html 按钮的 id 传递给 python 文件?

javascript - 将视频和 Canvas 大小调整为最大尺寸

Javascript检查是否选择了一个单选按钮

for 循环中的 JavaScript 回调