有此页面上有太多积极的WebGL环境中,最古老的背景下将会丢失。 [dedup.min.js](

2019-11-05 05:18发布

我只是在Safari浏览器得到这个wiered错误。 不知道为什么。 我使用AngularJS 1.3.x下

那么,如何检测其文库可以利用这一点。 为什么只有Safari我得到这个错误? 是否有通过JS的方式来启用或禁用的WebGL?

Answer 1:

你应该在你的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的上下文。 它不会阻止JavaScript的iframe中从创建上下文。 你需要相同的解决方案添加到每个iframe中。



文章来源: There are too many active WebGL contexts on this page, the oldest context will be lost. [dedup.min.js]