2013-10-20 54 views
1

我想添加一個iframe到第一個孩子與火狐插件之前的當前文檔的正文。Firefox插件:如何在頁面加載基於當前域名插入iFrame

我在做什麼:

  • 附加組件讀取當前的URL域名
  • 發送域名個人服務器
  • 服務器然後插入iframe的成體填入相應的內容

我閱讀了所有可能的Mozilla文檔,但是我不會找到任何說明將HTML元素插入當前網頁的內容。我是Firefox開發新手。

讀取域名:

var domain = document.domain; //not working 

我嘗試下面的代碼插入iframe中:

var pageMod = require("sdk/page-mod"); 
var ifrm =document.createElement('<iframe src=http://www.example.com/addon></iframe>'); 
pageMod.PageMod({ 
    include: "*.org", 
    contentScript: 'document.body.insertBefore(ifrm, document.body.firstChild);' 
}); 

問題:

  • 是否有可能與Firefox插件,或者我應該切換到Firefox擴展
  • 如何將iframe插入到bod y
+0

這可能不是你的問題的完整解決方案,但你在做錯誤的方式的createElement。嘗試像'var ifrm = document.createElement('iframe'); ifrm.setAttribute('src','http://www.example.com/addon'); document.body.insertBefore(ifrm,document.body.firstChild);' –

回答

1

看來您發佈的代碼屬於您的lib/main.js文件,該文件無法訪問任何DOM內容。這就是爲什麼在你沒有文件對象,所以你既不能訪問document.domain也不document.createElement。爲了訪問DOM的內容,你需要使用一個Content Script,在你的情況下,使用與PageMod這樣相關的腳本:

的lib/main.js

var pageMod = require("sdk/page-mod"); 
var data = require("sdk/self").data; 

pageMod.PageMod({ 
    include: "*.org", 
    when: "ready", 
    contentScriptFile: data.url("script.js") 
}); 

數據/腳本.js文件

var ifrm = document.createElement('iframe'); 
ifrm.setAttribute("src", "http://example.com/addon"); 
document.body.insertBefore(ifrm, document.body.firstChild); 
+0

我一直在使用插件sdk一段時間,但最近我有需要注入一個iframe,但即使我使用的是代碼非常類似於這個,iframe拒絕渲染。它注入到頁面中,但它只顯示任何內容:沒有消息,沒有控制檯錯誤或警告,只是空虛。 任何想法? –

+1

@AlbertoAlexanderRodriguez可能是由https://en.wikipedia.org/wiki/Same-origin_policy引起的,也就是說,如果注入的iframe和原始頁面的url不同(並且原始頁面用x-frame-options做出響應: 「SAMEORIGIN」) – cnmuc

相關問題