Hi,
ich schreib zur Zeit ein FireFox Plugin welches via JavaScript und DOM das Aussehen gewisser Webseiten abändert.
Funktioniert soweit auch ganz gut,
bist auf die Darstellung der im nachhinein hinzugefügeten Formulare.
Alle anderen Elemente (zb. <h3>...) machen keine Probleme.
Komischerweise werden alle hinzugefügten Elemente im DOM Inspector vom FF angezeigt,
auch die Formulare die nicht dargestellt werden.
Die Fehler-Konsole meint auch das alles ok währe X(
Ich verstehe es einfach nicht, die Formulare werden einfach nicht angezeigt obwohl sie im DOM Baum vorhanden sind.
Hoffe einer hat änliche Erfahrungen gemacht und kann mir weiter helfen.
Hier noch der Code (ab Zeile 44):
MfG
ich schreib zur Zeit ein FireFox Plugin welches via JavaScript und DOM das Aussehen gewisser Webseiten abändert.
Funktioniert soweit auch ganz gut,
bist auf die Darstellung der im nachhinein hinzugefügeten Formulare.
Alle anderen Elemente (zb. <h3>...) machen keine Probleme.
Komischerweise werden alle hinzugefügten Elemente im DOM Inspector vom FF angezeigt,
auch die Formulare die nicht dargestellt werden.
Die Fehler-Konsole meint auch das alles ok währe X(
Ich verstehe es einfach nicht, die Formulare werden einfach nicht angezeigt obwohl sie im DOM Baum vorhanden sind.
Hoffe einer hat änliche Erfahrungen gemacht und kann mir weiter helfen.
Hier noch der Code (ab Zeile 44):
Code:
// Bei jedem Seitenaufruf wird die Function "OnPageLoaded" aufgerufen.
window.addEventListener("load", OnPageLoaded, true);
// Prüft ob die Seite angepasst werden muss
function OnPageLoaded(){
// Browser "Handle"
var browser = getBrowser();
// Liste aller offenen Seiten (tabs,frames)
var documentList = GetDocuments(GetContentWindow());
// Das erste Element der Liste ist die aktuelle Seite
var pageDocument = documentList[0];
// Wird bei alles Aufrufen der Domain/URL benötigt
if (browser.contentDocument.location.href.search(/.?irgendeine.url.?/) != -1) {
// DOM Node der navigations Leiste
var navi = pageDocument.getElementById("navi");
// Alle einträge der navigations Leiste durchlaufen
for (var i=0; i < navi.childNodes.length; i++) {
// Das ist unser Link den wir manipulieren wollen
if(navi.childNodes[i].innerHTML == '<a href="/_abc.php/cluster/start"><b>Cluster</b></a>') {
// Link ersetzen
navi.childNodes[i].innerHTML = '<a href="/_abc.php/cluster/start"><b>HIVE</b></a>';
break;
}
}
}
// Wird nur bei der angegebenen URL benötigt
if (browser.contentDocument.location.href.search(/http:\/\/irgendeine.url\/_abc.php\/cluster\/start/) != -1) {
// DOM Node des DIV Containers
var clusterDiv = pageDocument.getElementById("cluster");
// Überschrift ändern. ChildNodes[1] ist ein "<H2>..." Element
clusterDiv.childNodes[1].innerHTML = "HIVE";
// Neue Sub Überschrift
var h = document.createElement("h3");
h.className = "cluster";
// Text für die Sub Überschrift
var hText = document.createTextNode("HIVE Search");
h.appendChild(hText);
// Überschrift zum DIV Container hinzufügen
clusterDiv.insertBefore(h, clusterDiv.childNodes[3]);
// -->!! Hier liegt das problem, die form wird einfach nicht angezeigt. Die obere <H3> Überschrift wird allerdings angezeigt. !!<--
// Formular erzeugen
var form = document.createElement("form");
form.className = "cluster";
// Formular Attribute hinzufügen
var formActionAtt = document.createAttribute("action");
formActionAtt.nodeValue = "_self";
form.setAttributeNode(formActionAtt);
var formMethodAtt = document.createAttribute("method");
formMethodAtt.nodeValue = "post";
form.setAttributeNode(formMethodAtt);
// <Input..> Element und Attribute hinzufügen
var input = document.createElement("input");
var inputAtt = document.createAttribute("type");
inputAtt.nodeValue = "text";
input.setAttributeNode(inputAtt);
var inputAtt2 = document.createAttribute("value");
inputAtt2.nodeValue = "test";
input.setAttributeNode(inputAtt2);
// Input Element zum Formular hinzufügen
form.appendChild(input);
// Formular zum DIV Container hinzufügen (am index der clusterDiv.childNodes kann es nicht liegen, hab ich überprüft)
clusterDiv.insertBefore(form, clusterDiv.childNodes[4]);
}
}
//
function GetDocuments(frame) {
var documents = new Array();
if(frame) {
var frames = frame.frames;
var framesLength = frames.length;
if(frame.document) {
documents.push(frame.document);
}
for(var i = 0; i < framesLength; i++) {
documents = documents.concat(GetDocuments(frames[i]));
}
}
return documents;
}
//
function GetContentWindow() {
return GetSelectedBrowser().contentWindow;
}
//
function GetSelectedBrowser() {
return window.top.getBrowser().selectedBrowser;
}