Methode nicht definiert

IM_Morphium

Grünschnabel
Guten Abend,
Ich habe ein kleines Problem bezüglich meinen Code

Als erstes habe ich das Grundgerüst erstellt
PHP:
// ==UserScript==
// @name           Imaginarum Update
// @namespace      http://www.imaginarum.net
// @description    Verbessert das Imaginarum Forum durch neue Funktionen
// @version        0.1
// @author         Morphium
// @license        OHNE License
// @include        http://46.4.67.119/forum/*
// @include        46.4.67.119/forum/*
// ==/UserScript==

/* -------------------{ Objekterstellung }------------------- */
// Imaginarum Editoren
function IM_Editor(id) {
	// Eigenschaften
	this.id = id;										// ID des jeweiligen Editor
	var exist = document.getElementById(id);			// Überprüft ob der Editor auf der Webseite existiert
	
	// Nur weiter arbeiten, wenn Editor verfügbar ist
	if(exist != null) {
		// Sammelstelle der Buttons festlegen
		var controlbar = document.createElement('DIV');
		controlbar.setAttribute('id', id+"_Imaginarum_controls");
		controlbar.setAttribute('class',"controlbar");
		
		//Editor injizieren
		document.getElementById(id).appendChild( controlbar );
	}
	
	this.addButton = function(button) {
		// Nur weiter arbeiten, wenn Editor verfügbar ist
		if(exist != null) {
			document.getElementById(id+"_Imaginarum_controls").appendChild( button.getElement() );
		}
	}
}

// Button Grundgerüst
function Button(titel, bildadresse, funktion) {
	var element = document.createElement('IMG');		// Bild erstellt
	
	// Bild-parameter zuweisen
	element.setAttribute('title', titel);				// Beschreibung
	element.setAttribute('alt', titel);					// Beschreibung
	element.setAttribute('src', bildadresse);			// Quelle
	element.setAttribute('onclick', funktion);			// Einclick-aktion
	
	this.getElement = function() {
		return element;	
	}
}


// Anschließend die Objekte festgelegt
PHP:
/* ------------------------{ Ablauf }------------------------ */
// Vorhandene Imaginarum-Editoren eintragen
var Editoren = new Array();
Editoren[0] = new IM_Editor('vB_Editor_QR');	// Einfacher Editor
Editoren[1] = new IM_Editor('vB_Editor_001');	// Erweiterter Editor

// Button erzeugen die später eingebunden werden sollen
var Buttons = new Array();
Buttons[0] = new Button('Youtube', 'http://localhost/ftp/youtube_icon.png', "youtube('Aloha')");	// Youtube

// Zum Schluss habe ich die Button in den Editor eingefügt, sofern er vorhanden ist
PHP:
for(i=0;i<Editoren.length;i++) {
	for(j=0;j<Buttons.length;j++) {
		Editoren[i].addButton(Buttons[j]);
	}
}


// Ach ja die Funktion die jeder einzelner Button bekommen hat, steht noch darunter:
PHP:
/* -----------{ Funktion der einzelnenen Button }----------- */
var youtube = function(a) {
	alert(a);	
}

PHP:
function youtube(a) {
       alert(a);
}

Beide Methoden habe ich nacheinander getestet ;)

Jetzt ist das Problem, wenn man auf den Button klickt, dann findet er die dazugehörige Funktion nicht. Folgende Meldung wird ausgegeben:

Uncaught ReferenceError: youtube is not defined
 
Zuletzt bearbeitet:
Hi,

übergib die Funktion nicht als String, sondern als anonymes-Funktionsobjekt:
Code:
Buttons[0] = new Button('Youtube', 'http://localhost/ftp/youtube_icon.png', function(){youtube('Aloha'); });
Ciao
Quaese
 
Funktioniert leider nicht, wenn ich es als anonyme Funktion weiterleiten will, kommt beim klicken des Buttons eine Fehlermeldung mit
Uncaught SyntaxError: Unexpected token (.

Es sind aber alle Syntaxen korrekt!

PHP:
// ==UserScript==
// @name           Imaginarum Update
// @namespace      http://www.imaginarum.net
// @description    Verbessert das Imaginarum Forum durch neue Funktionen
// @version        0.1
// @author         Morphium
// @license        OHNE License
// @include        http://46.4.67.119/forum/*
// @include        46.4.67.119/forum/*
// ==/UserScript==

/* -------------------{ Objekterstellung }------------------- */
// Imaginarum Editoren
function IM_Editor(id) {
	// Eigenschaften
	this.id = id;										// ID des jeweiligen Editor
	var exist = document.getElementById(id);			// Überprüft ob der Editor auf der Webseite existiert
	
	// Nur weiter arbeiten, wenn Editor verfügbar ist
	if(exist != null) {
		// Sammelstelle der Buttons festlegen
		var controlbar = document.createElement('DIV');
		controlbar.setAttribute('id', id+"_Imaginarum_controls");
		controlbar.setAttribute('class',"controlbar");
		
		//Editor injizieren
		document.getElementById(id).appendChild( controlbar );
	}
	
	this.addButton = function(button) {
		// Nur weiter arbeiten, wenn Editor verfügbar ist
		if(exist != null) {
			document.getElementById(id+"_Imaginarum_controls").appendChild( button.getElement() );
		}
	}
}

// Button Grundgerüst
function Button(titel, bildadresse, funktion) {
	var element = document.createElement('IMG');		// Bild erstellt
	
	// Bild-parameter zuweisen
	element.setAttribute('title', titel);				// Beschreibung
	element.setAttribute('alt', titel);					// Beschreibung
	element.setAttribute('src', bildadresse);			// Quelle
	element.setAttribute('onclick', funktion);			// Einclick-aktion
	
	this.getElement = function() {
		return element;	
	}
}

/* -----------{ Funktion der einzelnenen Button }----------- */
function youtube(a) {
	alert(a);	
}


/* ------------------------{ Ablauf }------------------------ */
// Vorhandene Imaginarum-Editoren eintragen
var Editoren = new Array();
Editoren[0] = new IM_Editor('vB_Editor_QR');	// Einfacher Editor
Editoren[1] = new IM_Editor('vB_Editor_001');	// Erweiterter Editor

// Button erzeugen die später eingebunden werden sollen
var Buttons = new Array();
Buttons[0] = new Button('Youtube', 'http://localhost/ftp/youtube_icon.png', function(){youtube('Aloha'); });

for(i=0;i<Editoren.length;i++) {
	for(j=0;j<Buttons.length;j++) {
		Editoren[i].addButton(Buttons[j]);
	}
}

Ich habe keine Ahnung warum er das sagt und warum er beim vorherigen Beispiel die Methode nicht findet.
 
Hi,

folgendes Konstrukt funktioniert bei mir:
Code:
<html>
<head>
<script type="text/javascript">
<!--
// ==UserScript==
// @name           Imaginarum Update
// @namespace      http://www.imaginarum.net
// @description    Verbessert das Imaginarum Forum durch neue Funktionen
// @version        0.1
// @author         Morphium
// @license        OHNE License
// @include        http://46.4.67.119/forum/*
// @include        46.4.67.119/forum/*
// ==/UserScript==

/* -------------------{ Objekterstellung }------------------- */
// Imaginarum Editoren
function IM_Editor(id) {
    // Eigenschaften
    this.id = id;                                        // ID des jeweiligen Editor
    var exist = document.getElementById(id);            // Überprüft ob der Editor auf der Webseite existiert

    // Nur weiter arbeiten, wenn Editor verfügbar ist
    if(exist != null) {
        // Sammelstelle der Buttons festlegen
        var controlbar = document.createElement('DIV');
        controlbar.setAttribute('id', id+"_Imaginarum_controls");
        controlbar.setAttribute('class',"controlbar");

        //Editor injizieren
        document.getElementById(id).appendChild( controlbar );
    }

    this.addButton = function(button) {
        // Nur weiter arbeiten, wenn Editor verfügbar ist
        if(exist != null) {
            document.getElementById(id+"_Imaginarum_controls").appendChild( button.getElement() );
        }
    }
}

// Button Grundgerüst
function Button(titel, bildadresse, funktion) {
    var element = document.createElement('IMG');        // Bild erstellt

    // Bild-parameter zuweisen
    element.setAttribute('title', titel);                // Beschreibung
    element.setAttribute('alt', titel);                    // Beschreibung
    element.setAttribute('src', bildadresse);            // Quelle
    element.setAttribute('onclick', funktion);            // Einclick-aktion

    this.getElement = function() {
        return element;
    }
}


/* -----------{ Funktion der einzelnenen Button }----------- */
var youtube = function(a) {
    alert(a);
}


window.onload = function(){
	/* ------------------------{ Ablauf }------------------------ */
	// Vorhandene Imaginarum-Editoren eintragen
	var Editoren = new Array();
	Editoren[0] = new IM_Editor('vB_Editor_QR');    // Einfacher Editor
	Editoren[1] = new IM_Editor('vB_Editor_001');    // Erweiterter Editor

	// Button erzeugen die später eingebunden werden sollen
	var Buttons = new Array();
	Buttons[0] = new Button('Youtube', 'bild.gif', function(){youtube('Aloha'); });    // Youtube

	for(i=0;i<Editoren.length;i++) {
    for(j=0;j<Buttons.length;j++) {
        Editoren[i].addButton(Buttons[j]);
    }
	}
}
//-->
</script>
</head>
<body>
<div id="vB_Editor_QR">&nbsp;</div>
<div id="vB_Editor_001">&nbsp;</div>
</body>
</html>
Ciao
Quaese
 
Das bereit erstellte Script funktioniert nur beim Internet Explorer o_O
Das Problem ist nur, dass das eine Google Chrome Erweiterung ist bzw später auch Mozilla Firefox.
Das gibt es doch nicht, wieso funktioniert den das nicht. >.<
 
Wer hätte Gedacht das die Lösung so simple ist:

PHP:
element.setAttribute('onclick', funktion);

ersetzen:
PHP:
element.addEventListener('click', funktion);

;)
 
Zurück