2013-09-24 259 views
0

我使用附加SDK创建Firefox插件。我想从远程URL获取数据并将其注入当前html。截至目前我能够使用Firefox插件sdk的请求模块获取数据,但m无法将其注入当前页面。更改html页面内容

例如:我正在获取来自网站的响应“abc.com”。经过取回应,我将增加当前页面响应

// main.js 

var widgets = require("sdk/widget"); 
var tabs = require("sdk/tabs"); 
var Request = require("sdk/request").Request; 

//create addon widget 
var widget = widgets.Widget({ 
    id: "div-show", 
    label: "Show divs", 
    contentURL: "http://www.mozilla.org/favicon.ico", 
    onClick: function() { 
    //initializing request module to fetch content 
    quijote.get(); 
    } 
}); 

//fetch content of requested page 
var quijote = Request({ 
    url: "http://localhost/abc/", 
    overrideMimeType: "text/plain; charset=latin1", 
    onComplete: function (response) { 
     //check if content is fetched successfully 
     addContent(response); 
    } 
}); 

//try and modify current page 
function addContent(response){ 
    //initialize page modification module 
    var pageMod = require("sdk/page-mod"); 
    tabs.activeTab.attach({ 
     contentScript: 'document.body.innerHTML = ' + ' "<h1>'+response.text+'</h1>";' 
    }); 
} 

是他们的任何方式,我可以增加我的当前页面? ?

+0

目前还不清楚你的目标究竟是什么。在页面加载时修改页面?自己加载一些页面并将其显示给用户?通过加载一些额外的html“注入”页面并注入? – nmaier

+0

@nmaier:我想从一些远程网站获取数据,并在增加当前页面后显示给用户。我已更新我的问题,请再次检查。 – Nikhil

+0

您遇到的问题是什么?比错误?或者当addcontent()被调用时它只是“我的h1不显示”? –

回答

1

您的代码将严重失败,例如当response.text包含双引号时。 那么你的代码将是(假设它是<a href="hello">world</a>):

document.body.innerHTML = "<h1><a href="hello">world</a></h1>"; 

这显然是无效的代码。

你的代码基本上构造从unsanitized数据的动态脚本,这是一个坏主意,因为(除上述退让的问题)

  1. 你会运行unsanitized内容脚本,如果该代码是有效的,即使和
  2. 如果这样会成功,页面也可能运行unsanitized代码。

这是Web相当于SQL注入攻击....

首先,让我们解决1)用messagingmore):

var worker = tabs.activeTab.attach({ 
    contentScript: 'self.port.on("setdom", function(data) { ' + 
        + 'document.body.innerHTML = data; /* still a security issue! */' 
        + '});' 
}); 
worker.port.emit("setdom", response.text); 

这保证了内容的脚本有效(甚至可以运行)并且不运行任意代码。

但是2.)仍然是一个问题。阅读DOM Building and HTML insertion

+0

nmaier你的代码像魅力一样工作。我读了Dom构建文章,你可以告诉我或给我参考链接,说明如何在插件中使用该代码 – Nikhil

+0

尽管文章中的大部分内容也适用于常规网站,但文章已经写入了附加组件。 – nmaier

+0

感谢nmaier ....你是救星的好友 – Nikhil