Вы желаете, чтобы создать дерево XML DOM с помощью JavaScript в Firefox Add-на. Выполнение этого в дополнении Firefox несколько сложнее, чем форма JavaScript, запущенная на веб-странице. Причина этого в том, что переменные window
и document
не гарантируются. Даже если они установлены, они, вероятно, не настроены на то, что вы ожидаете от них. Дополнения Firefox имеют дело с несколькими окнами и несколькими документами. Таким образом, если вы используете переменные window
и document
, вы всегда должны быть уверены, что они настроены так, как вы их предполагали.
В этом примере мы просто находим основной элемент <window>
из недавно использованного окна Firefox и элемент <document>
, связанный с вкладкой, отображаемой в данный момент.
Следующий код, который будет производить XML вы хотите:
function createDesiredXMLElements() {
//To create elements, we need a <document>. To find a <document> we need a <window>.
//This gets the currently active Firefox XUL window.
// Add/remove a "/" to comment/un-comment the code appropriate for your add-on type.
//* Add-on SDK:
let activeWindow = require('sdk/window/utils').getMostRecentBrowserWindow();
//*/
/* Overlay and bootstrap (from almost any context/scope):
Components.utils.import("resource://gre/modules/Services.jsm");//Services
let activeWindow=Services.wm.getMostRecentWindow("navigator:browser");
//*/
//Get the HTML document for the currently displayed tab in the current Firefox window.
let contentDoc = activeWindow.content.document;
//To create XML elements, we need an XML document. We could do it without creating
// an XML document. But, then we would need to use createElementNS() to specify
// the XML namespace for each element. This way, they inherit the xmlDoc's namespace.
let xmlNS = "http://www.w3.org/XML/1998/namespace";
let xmlDoc = contentDoc.implementation.createDocument(xmlNS,"document");
//Create the XML elements/nodes/attribute and add text.
let testing = xmlDoc.createElement("testing");
let testingOne = xmlDoc.createElement("testingOne");
testingOne.setAttribute("attr","my_attrib");
let testingTwo = xmlDoc.createElement("TestingTwo");
testingTwo.textContent = "abc";
let testingThree = xmlDoc.createElement("TestingThree");
testingThree.textContent = "bbc";
//Place the elements as children of each appropriate node.
testing.appendChild(testingOne);
testingOne.appendChild(testingTwo);
testingOne.appendChild(testingThree);
//Show the alert. Note that the alert function is a method of a <window>:
activeWindow.alert(testing.outerHTML);
}
Оповещение производится этот код выглядит следующим образом:
Пример «формат XML», который вы предоставите не представляется (например, ни один из 'test',' testingOne', 'TestingTwo',' TestingThree', 'my_attrib' не существует в« формате XML »и' sub', 'sub1',' abc' , 'bbc' не существует в вашем коде). Пожалуйста, измените тот или другой, чтобы отразить то, что вы делаете, или то, что вы говорите, что хотите. Как бы то ни было, нам пришлось бы приложить гораздо больше усилий, чтобы попытаться угадать, что вы на самом деле хотели, а не просто взглянуть на код/пример и сказать, что это где-то неправильно. – Makyen
Изменен пример соответствия друг другу ... не могли бы вы мне помочь? – testerBDD
BTW: Если вы хотите, чтобы кто-то из вас уведомил вас о вашем комментарии, вам нужно включить их ID в свой комментарий с помощью @ перед ним. Например, для меня это будет @Makyen. Если вы сделаете это в первую очередь в своем комментарии, система предоставит автозаполненные предложения от тех, кто уже опубликовал комментарии к этому ответу/вопросу. Оригинальный плакат ответа/вопроса, на который вы комментируете, всегда будет уведомлен. Этот [мета-пост] (http://meta.stackexchange.com/a/43020/271271) содержит дополнительную информацию. В этом случае я не видел ваших комментариев почти год. – Makyen