博客报错 A Parser-blocking, cross-origin script, is invoked via document.write.

今天在例行巡检博客的时候发现 console 报错了:

2016-10-05_20-04-17_01

错误内容是:

A Parser-blocking, cross-origin script, https://s95.cnzz.com/z_stat.php?id=1257684520, is invoked via document.write. This may be blocked by the browser if the device has poor network connectivity.

A Parser-blocking, cross-origin script, https://c.cnzz.com/core.php?web_id=1257684520&t=z, is invoked via document.write. This may be blocked by the browser if the device has poor network connectivity.

第一次遇到这种问题,用 Safari 打开后发现并没有报错。考虑到之前更新了 Chrome 遂怀疑是 Chrome 的问题,Google 搜了一下搜到了这篇 http://stackoverflow.com/questions/39610829/a-parser-blocking-cross-origin-script-is-invoked-via-document-write-how-to-ci 在其中第一个答案处找到了 Google 的文档

浏览了一下,大意就是在页面渲染完成后就不能使用 document.write 方法了,从 Chrome 53 开始就会报以上的错误。文章还给出了一系列的解决方法。

仔细查了博客中的相关代码,发现时只加载了 z_stat.php 这个资源,很明显第二个报错是 z_stat.php 中的代码执行的,本想着将 document.write 换个方法写,现在换成别的写法也不能解决报错,只有先忍着,等 CNZZ 修改他们的代码了。


顺便随手给 CNZZ 发了一封邮件,希望能有回复。


10月9日收到了CNZZ回复的邮件:

您好,针对chrome新版对对第三方js的阻止的问题,目前依赖于JS的所有产品都会受此影响。

目前解决办法是建议您更换我们的异步加载代码,请参考附件。

但需要注意:使用异步加载代码后统计的数据会比普通JS代码数据少,

但目前如果更不换异步加载代码,在新版chrome的阻止下数据是直接统计不到的。

请您知悉,感谢您对U-WEB的支持!

打开附件 统计代码异步加载教程.docx ,按照教程提供的方法将js代码修改成异步加载后即可,需要提醒的是附件中的代码存在中英文符号的问题,所以可以复制下面的代码:

var cnzz_s_tag = document.createElement('script');
cnzz_s_tag.type = 'text/javascript';
cnzz_s_tag.async = true;
cnzz_s_tag.charset = 'utf-8';
cnzz_s_tag.src = 'https://w.cnzz.com/c.php?id=xxxxxx&async=1';
var root_s = document.getElementsByTagName('script')[0];
root_s.parentNode.insertBefore(cnzz_s_tag, root_s);

至此问题解决~

博客报错 A Parser-blocking, cross-origin script, is invoked via document.write.》上有12个想法

      • 这样可以吗?带图片的

        <a href=”httpsa://new.cnzz.com/v1/login.php?siteid=xxxxxx”><img src=”httpsa://web.umeng.com/static/img/main/icon.gif” alt=”cnzz_icon“></a><script type=”text/javascript“>var cnzz_s_tag = document.createElement(‘script’); cnzz_s_tag.type = ‘text/javascript’; cnzz_s_tag.async = true; cnzz_s_tag.charset = ‘utf-8’; cnzz_s_tag.src = ‘httpsa://w.cnzz.com/c.php?id=xxxxxx&async=1’; var root_s = document.getElementsByTagName(‘script’)[0]; root_s.parentNode.insertBefore(cnzz_s_tag, root_s);</script>

  1. 异步加载有时间顺序,要是一进来就需要使用该异步加载文件中的方法,这时候文件还没加载完成,那就会报错了
      • 你没看明白他问的问题,他不说报错原因,他说,你如果改成异步加载了,如果,在调用方法的时候,这个异步还没执行完,就会报错

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注