1

在 Firefox 附加组件中,我想向此网站中按钮的 URL 发送 HTTPRequest:www.google.com/ads/preferences。我尝试做的是获取包含按钮的表单并向操作属性发出 HTTP 请求(目标是获取服务器发送的双击 cookie,如果您这样做)。问题是,当我得到表单时,我得到一个 XRayWrapper 并且我不知道如何检索该属性(我已经尝试过这样做:

// 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;
}

另外,我发现当我得到 id="content-pane" 的 div 包含表单和对 innerHTML 的访问时,我得到一个空字符串。但这一定是可能的,因为我可以用另一个附加组件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: 
4

1 回答 1

3

您想要删除该包装器的唯一情况是想要与网页的 JavaScript 代码交互的扩展 - 即使这样,您是否应该这样做也是值得怀疑的。在这种特殊情况下,您绝对不应该这样做。XrayWrapper(以前称为 XPCNativeWrapper)是一个安全层,旨在保护您的扩展。您仍然可以通过它访问任何 DOM 方法和属性,就像您通常那样:

var url = form.getAttribute("action");

如果此调用未返回任何内容,则很可能action在您尝试访问该属性时未设置该属性。您可能需要等待更长时间,例如在load事件处理程序中运行您的代码,而不是DOMContentLoaded(显然,我不知道您当前在做什么)。

于 2012-06-12T08:08:15.683 回答