有没有办法尝试/捕获来自给定<script>标签

时间:2017-02-17 15:02:23

标签: javascript dom error-handling runtime-error

我遇到的错误是 s 经常从第三方JS发出像Chartbeat一样,我想抓住并丢弃/静音这些错误和相关的噪音。

&#xA;&#xA;

所有这些第三方脚本都做了一些变体:

&#xA;&#xA;
    &#xA;
  • 创建&lt; script&gt; DOM标记
  • &#xA;
  • 为源代码设置attrs等。
  • &#xA;
  • 将其附加到 window
  • &#xA;
  • 可选:重写或挂钩 window.onload 来调用初始化程序
  • &#xA;
&#xA;&#xA;

例如

&#xA;&#xA;
  function loadChartbeat(){& #xA; window._sf_endpt =(new Date())。getTime();&#xA; var e = document.createElement('script');&#xA; e.setAttribute('language','javascript');&#xA; e.setAttribute('type','text / javascript');&#xA; e.setAttribute('src','// static.chartbeat.com/js/chartbeat.js');
 document.body.appendChild(e);&#xA;}&#xA;  
&#xA;&#xA;

我如何 try / catch 这个上下文中的错误?

&#xA;&#xA;

在处理&lt; script&gt; 标签时,还有另一种方法可以避免错误的冒泡加载这种模式?

&#xA;&#xA;
&#xA;&#xA;

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

&#xA;&#xA;
  function stoperror(){&#xA; return true;&#xA;}&#xA; function loadChartbeat(){&#xA; window._sf_endpt =(new Date())。getTime();&#xA; var e = document.createElement('script');&#xA; e.setAttribute('language','javascript');&#xA; e.setAttribute('type','text / javascript');&#xA; e.setAttribute('src','// static.chartbeat.com/js/chartbeat.js');
 e.onerror = stoperror;&#xA; document.body.appendChild(e);&#xA;}&#xA;  
&#xA;&#xA;

但错误继续冒出来。

&#XA;

1 个答案:

答案 0 :(得分:-1)

最简单的方法是添加服务器端。那样的话:

//loadscript.php
<?php
echo "try{";
readfile($_GET["url"]);//bad style, may improve it
echo "}catch(e){}";
?>

在用户方面,它会变得混乱,涉及安全性和可用性。可能会这样:

[...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){}
  });
});