Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将getComputedStyle与DOMParser生成的文档(没有defaultView或窗口对象)一起使用?_Javascript_Firefox_Gecko - Fatal编程技术网

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