Javascript 如何从这个x光包装器中获取内容?
在firefox插件中,我想向此网站中按钮的URL发送一个HTTPRequest:。 我尝试做的是获取包含按钮的表单,并向action属性发出HTTP请求(目标是获取双击cookies,如果您这样做,服务器会发送这些cookies)。问题是,当我得到表单时,我得到了一个XRayWrapper,我不知道如何检索该属性(我已经尝试过:Javascript 如何从这个x光包装器中获取内容?,javascript,firefox-addon,firefox-addon-sdk,Javascript,Firefox Addon,Firefox Addon Sdk,在firefox插件中,我想向此网站中按钮的URL发送一个HTTPRequest:。 我尝试做的是获取包含按钮的表单,并向action属性发出HTTP请求(目标是获取双击cookies,如果您这样做,服务器会发送这些cookies)。问题是,当我得到表单时,我得到了一个XRayWrapper,我不知道如何检索该属性(我已经尝试过: // unwrap is not available on older branches (3.5 and 3.6) - Bug 533596 if (XPCNati
// unwrap is not available on older branches (3.5 and 3.6) - Bug 533596
if (XPCNativeWrapper && "unwrap" in XPCNativeWrapper) {
try {
return XPCNativeWrapper.unwrap(thing);
} catch(e) {
// Unwrapping will fail for JS literals - numbers, for example. Catch
// the exception and proceed, it will eventually be returend as-is.
}
}
if (thing['wrappedJSObject']) {
return thing.wrappedJSObject;
}
此外,我还发现,当我获取包含表单和对innerHTML的访问的id=“content pane”的div时,会得到一个空字符串。但这必须是可能的,因为我可以使用firebug(另一个附加组件)查看这些内容
我真的迷路了,谢谢你的帮助
编辑:我正在使用附加SDK,因此我创建了一个页面工作程序来处理所有这些:
createDoubleClick: function() {
new PageWorker.Page({
contentURL: "http://www.google.com/ads/preferences",
contentScriptFile: data.url('contentScripts/getCookie.js'),
contentScriptWhen: "end",
onMessage: function(message) {
console.log(message);
}
});
}
然后,在contetScript中,我尝试获取DOM:
// Get button
var idPanel = "content-pane";
// Get content panel
var panel = document.getElementById(idPanel);
console.log(panel.innerHTML);
结果:
info:
您希望删除该包装的唯一场景是希望与网页的JavaScript代码交互的扩展,即使这样,您是否应该这样做也是值得怀疑的。在这个特定场景中,您绝对不应该这样做。XrayWrapper(以前称为XPCNativeWrapper)是。您仍然可以通过它访问任何DOM方法和属性,就像您通常所做的那样:
var url = form.getAttribute("action");
如果此调用没有返回任何内容,则在您尝试访问它时很可能没有设置
操作
属性。您可能需要等待更长的时间,例如,在加载
事件处理程序中运行代码,而不是在DOMContentLoaded
中运行代码(显然,我不知道您当前正在做什么).首先,感谢您的快速响应。我编辑并描述了更多我实际正在做的事情。如您所见,我使用“contentScriptWhen:”end“”执行worker,我假设应该已经加载了,但是当我获取面板的innerHTML时,我没有通过控制台获取任何内容。所有这些的目标是从浏览器中加载的httprequest中获取Cookie。@Kits89:页面将被加载,当然。但是如果我正确地理解它。如果您将整个代码放入setTimeout(function(){…},0)
(最小限度地延迟),那么它应该可以工作。