如何使用带有DOMParser生成文件的getComputedStyle(没有defaultView或window对象)?

时间:2013-12-31 01:08:47

标签: javascript firefox gecko

我有这段代码(简化):

var s = '<div>html...</div>';  
var parser = new DOMParser();  
var doc = parser.parseFromString(s, 'text/html');  

生成的文档对象没有defaultView也没有窗口属性,所以有没有办法调用getComputedStyle()?

要解释更多:我在Firefox扩展中使用这样的代码,对HTML文件和序列化执行批量DOM操作,然后将修改后的文档写回磁盘。

正如迈克所指出的,有一个隐藏的DJWindow,所以我将他的代码改编成这样的东西:

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!

谢谢Mike,我从来不知道有一个隐藏的DJWindow。

1 个答案:

答案 0 :(得分:1)

这应该来自内容或扩展名:

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);

如果您无权访问某个窗口,例如从扩展中你可以这样做:

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);