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