Javascript SVG过滤器在Safari中不工作
在Safari 11.0上,如果我将以下代码复制并粘贴到js控制台中,我会得到如图A所示的结果,在图A中,过滤器并没有应用于所有元素 然而,如果我在Chrome上做同样的事情,我会得到如图B所示的结果,过滤器已按预期应用于所有元素 我只是简单地添加了一个SVG过滤器,我想应用于整个HTML文档 有什么建议可以解释为什么这是在Chrome而不是Safari上实现的吗Javascript SVG过滤器在Safari中不工作,javascript,html,css,safari,svg-filters,Javascript,Html,Css,Safari,Svg Filters,在Safari 11.0上,如果我将以下代码复制并粘贴到js控制台中,我会得到如图A所示的结果,在图A中,过滤器并没有应用于所有元素 然而,如果我在Chrome上做同样的事情,我会得到如图B所示的结果,过滤器已按预期应用于所有元素 我只是简单地添加了一个SVG过滤器,我想应用于整个HTML文档 有什么建议可以解释为什么这是在Chrome而不是Safari上实现的吗 var matrixValue = '0.299 0.587 0.114 0 0 0.299 0.587 0.114 0 0
var matrixValue = '0.299 0.587 0.114 0 0 0.299 0.587 0.114 0 0 0.299 0.587 0.114 0 0 0 0 0 1 0';
var div = document.createElement('div');
div.innerHTML = "<svg xmlns='http://www.w3.org/2000/svg' version='1.1'><defs><filter id='ulSvgFilterDoc2'><feColorMatrix type='matrix' values='" + matrixValue + "'></feColorMatrix></filter></defs></svg>";
div.setAttribute('class', 'ulSvgFilterDoc');
div.setAttribute('id', 'ulSvgFilterDoc');
div.setAttribute('style', 'display: none;');
document.getElementsByTagName('body')[0].append(div);
document.getElementsByTagName('html')[0].setAttribute('style', 'filter: url("#ulSvgFilterDoc2")');
var matrixValue='0.299 0.587 0.114 0 0 0 0.299 0.587 0.114 0 0.299 0.587 0.114 0 0 0 0 1 0';
var div=document.createElement('div');
div.innerHTML=“”;
div.setAttribute('class','ulSvgFilterDoc');
div.setAttribute('id','ulSvgFilterDoc');
div.setAttribute('style','display:none;');
document.getElementsByTagName('body')[0].append(div);
document.getElementsByTagName('html')[0].setAttribute('style','filter:url('ulSvgFilterDoc2');
图A:狩猎
图B:铬
有趣。。。我最初认为这是因为
自定义元素,但当它工作时……所有内容都来自与过滤器相同的域吗?筛选器中存在跨站点限制。@MichaelMullany这些限制不只是筛选器本身吗?就像你不能加载跨站点过滤器,但你可以将其应用于任何内容。(事实上,由于我能够重新编程,我可以确定使用相同规则直接定位g-XXX
元素确实有效。)我对此有点生疏-你说得对-你没有使用任何可污染的原语或输入信号,看起来这是一个WebKit错误。有趣的。。。我最初认为这是因为
自定义元素,但当它工作时……所有内容都来自与过滤器相同的域吗?筛选器中存在跨站点限制。@MichaelMullany这些限制不只是筛选器本身吗?就像你不能加载跨站点过滤器,但你可以将其应用于任何内容。(事实上,由于我能够重新编程,我可以确定使用相同规则直接定位g-XXX
元素确实有效。)我对此有点生疏-你是对的-你没有使用任何可污染的原语或输入标记,看起来这是一个WebKit错误。