Javascript innerHTML不';不接受检索到的变量

Javascript innerHTML不';不接受检索到的变量,javascript,Javascript,我正在尝试从获取客户端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&am

我正在尝试从获取客户端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>
我不知道为什么第一种方法有效,第二种方法无效


客户

var s$=函数(e){ 返回文档.getElementById(e); }; 函数getIP(json){ s$('clientIP').innerHTML=json.ip; }
这最像是因为一个广告拦截器插件(如AdBlock plus)而发生的。要测试这一点,请尝试在匿名模式下运行,或尝试在其他浏览器中运行

要永久修复它,您可以删除ad阻止程序扩展

我不能确定广告拦截器使用的确切算法,但您的第二个代码片段中的某些内容正在触发广告拦截器“思考”它需要阻止该内容

关于第二个问题(
无法设置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>

var s$=函数(e){return document.getElementById(e);};
函数getIP(json){
setTimeout(函数(){
s$('clientIP').innerHTML=json.ip;
}, 1000);
}

以上代码有效,我在问题中添加了一个代码段。对我来说,该错误意味着ipify scrpt没有正确加载,因此从未调用您的回调。您的StackOverflow问题代码段有效,那么您的代码与此有何不同?您的
标记是在文档中其余HTML之前还是之后?另外,这是您的控制台中唯一的错误吗?没有什么比“无法将属性'innerHTML'设置为null”更合适的了?请查看我的UpdateBlock源代码it@Kermit,我不是100%确定,但可能是您的DOM元素尚未呈现。您可以尝试在超时时包装函数调用(或者获取jQuery并使用document.ready函数)。
<div>
    <p><label for="clientIP">clientIP</label><span id="clientIP"></span></p>
</div>
Failed to load resource: net::ERR_BLOCKED_BY_CLIENT
<script type="application/javascript">
var s$ = function(e) {return document.getElementById(e);};

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