此页面上的活动WebGL上下文太多,最旧的上下文将丢失。 [dedup.min.js]

时间:2018-09-23 09:04:15

标签: angularjs safari webgl

我仅在Safari浏览器上遇到了这个严重的错误。不知道为什么。 我正在使用AngularJS1.3.x。 click here for image

因此,我如何检测哪些库可能正在使用此库。 为什么只在野生动物园中出现此错误? 是否可以通过JS启用或禁用WebGL?

1 个答案:

答案 0 :(得分:0)

将其放在HTML的顶部吗?

<script>
HTMLCanvasElement.prototype.getContext = (function(origFn) {
  var bannedTypes = {
    "webgl": true,
    "webgl2": true,
    "experimental-webgl":, true,
  };
  return function() {
    var type = arguments[0];
    return bannedTypes[type]
       ? null
       : origFn.apply(this, arguments);
  };
}(HTMLCanvasElement.prototype.getContext));
</script>

只要它出现在任何其他脚本之前,它就应该阻止webgl。

以上更改后的脚本替换了功能someCanvas.getContext,以便其他JavaScript尝试创建“ webgl”上下文时,它返回null,这意味着创建上下文失败。否则,如果JavaScript请求其他类型的上下文,它将调用原始的getContext函数。

只要首先执行此脚本,它就应防止页面上的其他JavaScript创建webgl上下文。它不会阻止iframe中的JavaScript创建上下文。您需要为每个iframe添加相同的解决方案。