我正在写一个firefox插件,我正在尝试使用xul叠加来插入canvas元素。问题是,我要插入canvas元素的父xul节点没有id。如果没有身份证可以吗?我也试过将anonid用于没有id的元素,如下所示,但也没有运气。
我的xul叠加:
<?xml version="1.0"?>
<overlay id="myOverlay"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
xmlns:html="http://www.w3.org/1999/xhtml">
<tabbrowser id="content">
<tabbox anonid="tabbox">
<tabpanels anonid="panelcontainer">
<notificationbox>
<stack anonid="browserStack">
<html:canvas id="myCanvas" height="100%" />
</stack>
</notificationbox>
</tabpanels>
</tabbox>
</tabbrowser>
</overlay>
我希望在每个标签中的每个浏览器元素之后插入canvas元素,如下所示:http://img.photobucket.com/albums/v215/thegooddale/80eae9ee.jpg
答案 0 :(得分:2)
尝试为此使用叠加层存在多个问题:
每次都必须使用JavaScript并“手动”注入画布。您可以使用TabOpen
event在打开选项卡时收到通知。像这样的东西应该工作(未经测试的代码):
// Always wait for the window to initialize first
window.addEventListener("load", function()
{
function initTab(tab)
{
var browser = window.gBrowser.getBrowserForTab(tab);
var canvas = document.createElementNS("http://www.w3.org/1999/xhtml",
"canvas");
canvas.setAttribute("anonid", "myCanvas");
canvas.setAttribute("height", "100%");
browser.parentNode.appendChild(canvas);
}
// Init all existing tabs first
var tabs = window.gBrowser.tabs;
for (var i = 0; i < tabs.length; i++)
initTab(tabs[i]);
// Listen to TabOpen to init any new tabs opened
window.gBrowser.tabContainer.addEventListener("TabOpen", function(event)
{
initTab(event.target);
}, false);
}, false)
请注意,此代码设置anonid
属性而不是id
- ID应该是唯一的,您不应该为十几个元素分配相同的ID。
答案 1 :(得分:1)
如果没有id,这将无效。您可以在XUL文档中插入一段Javascript,使用document.querySelector
在XBL绑定中查找tabpanels
,然后将动态创建的canvas
附加到id。
但是,由于每次打开新标签页时都会创建一个新notificationbox
,因此您应该让javascript监视新标签页并相应地插入画布。