2013-09-24 257 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