Javascript 如何将getComputedStyle与DOMParser生成的文档(没有defaultView或窗口对象)一起使用?
我有以下代码(简化):Javascript 如何将getComputedStyle与DOMParser生成的文档(没有defaultView或窗口对象)一起使用?,javascript,firefox,gecko,Javascript,Firefox,Gecko,我有以下代码(简化): var s='html…'; var parser=新的DOMParser(); var doc=parser.parseFromString(s'text/html'); 生成的文档对象既没有defaultView属性,也没有窗口属性,因此是否有方法调用getComputedStyle() 进一步解释:我在Firefox扩展中使用了这样的代码,该扩展对HTML文件执行批处理DOM操作,并序列化修改后的文档,然后将其写回磁盘 正如Mike指出的,有一个隐藏窗口,所以我将
var s='html…';
var parser=新的DOMParser();
var doc=parser.parseFromString(s'text/html');
生成的文档对象既没有defaultView属性,也没有窗口属性,因此是否有方法调用getComputedStyle()
进一步解释:我在Firefox扩展中使用了这样的代码,该扩展对HTML文件执行批处理DOM操作,并序列化修改后的文档,然后将其写回磁盘
正如Mike指出的,有一个隐藏窗口,所以我将他的代码改编成如下内容:
const { Services } = Cu.import("resource://gre/modules/Services.jsm");
var s = '<div style="color:red;font-family:Tahoma">html...</div>';
var parser = new DOMParser();
var doc = parser.parseFromString(s, 'text/html');
var div = doc.querySelector("div");
var win = Services.appShell.hiddenDOMWindow;
var div2 = win.document.importNode(div, true);
var style = win.getComputedStyle(div2);
alert( style.getPropertyValue('color') ); //alerts rgb(255, 0, 0) which is correct!
const{Services}=Cu.import(“resource://gre/modules/Services.jsm");
var s='html…';
var parser=新的DOMParser();
var doc=parser.parseFromString(s'text/html');
var div=文件查询选择器(“div”);
var win=Services.appShell.hiddenDOMWindow;
var div2=win.document.importNode(div,true);
var style=win.getComputedStyle(div2);
警报(style.getPropertyValue('color'))//警告rgb(255,0,0)哪一个是正确的!
谢谢你,迈克,我从来都不知道有一个隐藏窗口。这应该可以从内容或扩展中使用:
var s = '<div>html...</div>';
var parser = new DOMParser();
var doc = parser.parseFromString(s, 'text/html');
var div = doc.querySelector("div");
var style = window.getComputedStyle(div);
var s='html…';
var parser=新的DOMParser();
var doc=parser.parseFromString(s'text/html');
var div=文件查询选择器(“div”);
var style=window.getComputedStyle(div);
如果您没有访问窗口的权限(例如从分机),则可以通过以下方式进行访问:
const { Services } = Cu.import("resource://gre/modules/Services.jsm");
var s = '<div>html...</div>';
var parser = new DOMParser();
var doc = parser.parseFromString(s, 'text/html');
var div = doc.querySelector("div");
var win = Services.appShell.hiddenDOMWindow;
var style = win.getComputedStyle(div);
const{Services}=Cu.import(“resource://gre/modules/Services.jsm");
var s='html…';
var parser=新的DOMParser();
var doc=parser.parseFromString(s'text/html');
var div=文件查询选择器(“div”);
var win=Services.appShell.hiddenDOMWindow;
var style=win.getComputedStyle(div);
谢谢Mike,虽然您的代码可以正常工作,但无法正常工作!返回的CSSStyleDeclaration对象的所有属性值都设置为默认值。但它给了我需要的指针,所以我接受了答案。这行不通。计算样式仅适用于添加到窗口文档中的元素。虽然您可以调用该方法并获得响应,但样式不是正确的,而是每个标记的默认样式。
const { Services } = Cu.import("resource://gre/modules/Services.jsm");
var s = '<div>html...</div>';
var parser = new DOMParser();
var doc = parser.parseFromString(s, 'text/html');
var div = doc.querySelector("div");
var win = Services.appShell.hiddenDOMWindow;
var style = win.getComputedStyle(div);