首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法尝试/捕捉来自给定<script>标记的JS噪声?

有没有办法尝试/捕捉来自给定<script>标记的JS噪声?
EN

Stack Overflow用户
提问于 2017-02-17 15:02:22
回答 1查看 110关注 0票数 0

我有这样的情况:错误S经常是从第三方JS发出的,比如Chartbeat等等。我想捕捉并丢弃这些错误和相关的噪音。

所有这样的第三方脚本都有以下几个变体:

  • 创建<script> DOM标记
  • 为源等设置吸引。
  • 将其附加到window
  • 可选:重写或挂起window.onload以调用初始化程序

例如:

代码语言:javascript
复制
function loadChartbeat() {
  window._sf_endpt=(new Date()).getTime();
  var e = document.createElement('script');
  e.setAttribute('language', 'javascript');
  e.setAttribute('type', 'text/javascript');
  e.setAttribute('src', '//static.chartbeat.com/js/chartbeat.js');
  document.body.appendChild(e);
}

如何在此上下文中try/catch错误?

在处理此模式的<script>标记/加载时,是否有另一种方法可以避免错误的冒泡?

我尝试添加一个静音函数,像这样

代码语言:javascript
复制
function stoperror() {
  return true;
}
function loadChartbeat() {
  window._sf_endpt=(new Date()).getTime();
  var e = document.createElement('script');
  e.setAttribute('language', 'javascript');
  e.setAttribute('type', 'text/javascript');
  e.setAttribute('src', '//static.chartbeat.com/js/chartbeat.js');
  e.onerror = stoperror;
  document.body.appendChild(e);
}

但这些错误仍在继续冒泡。

EN

回答 1

Stack Overflow用户

发布于 2017-02-17 15:15:26

最简单的方法是将它添加到服务器端。就像这样:

代码语言:javascript
复制
//loadscript.php
<?php
echo "try{";
readfile($_GET["url"]);//bad style, may improve it
echo "}catch(e){}";
?>

在用户端,它将陷入混乱,涉及安全性+可用性。可以做这样的事情:

代码语言:javascript
复制
[...document.getElementsByTagName("script")].forEach(function(el){
 var url=el.src;
 el.parentNode.removeChild(el);
 ajax(url,function(code){ // needs to be implemented
     try{
       eval(code);
     }catch(e){}
  });
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42301074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档