| 

.NET C# Java Javascript Exception

2
Hallo

Ich habe mit GeckoFX XulRunner in ein C#-Projekt eingebunden und möchte nun Informationen zwischen Javascript und C# austauschen.

Die Richtung C#=>JS geling mir mittels

geckoWebBrowser1.Navigate("javascript:void(alert(1));");


Am Aufruf von C#-Komponenten aus Javascript heraus scheitere ich aber.
Da fehlt es mir auch am Grundverständnis im Umgang mit xpcom und xpconnect.

Kann mir jemand dazu ein paar Tipps geben oder zumindest Quellen nennen (Denn auch meine Internet-Recherche hat mich nicht weiter gebracht)?

Vielen Dank im Voraus
huckepick
28.11.2009
huckepick 887 2 8
2 Antworten
2
Das ist ein bischen kompliziert :)
Also ich hab zwar nicht das GeckoFX eingebunden sondern arbeite direkt mit dem XULrunner, aber so in etwa geht das:
1) Erstelle im XUL code einen Eventhandler für das geladene Dokument:
document.addEventListener("Debug", Debug, false, true);
function Debug(event)
{
// mache was
event.target.setAttribute("result","rückgabewert");
}

2) Feuere im JS code des Dokuments um die 'funktion' Debug in XUL 'aufzurufen'
var ev = document.createEvent("Events");
ev.initEvent(functionName, true, false);
element.dispatchEvent(ev);
var result = ev.target.getAttribute("result");

3) Um Parameter an XUL weiterzuleiten nutze ein unsichtbares SPAN
// JS code im Dokument:
var element = document.getElementById(functionName+"Args");
if( element )
document.documentElement.removeChild(element);
else
element = document.createElement("span");
element.id = functionName+"Args";
for(var i=0; i<arguments.length; i++)
element.setAttribute("arg"+i, to_json(arguments[i]));
document.documentElement.appendChild(element);
// im XUL code dann auf das element mit der id
// functionName+"Args" zugreifen und die Argumente auslesen


EDIT: Hab grad ein paar Links dazu in meiner Toolbar gefunden:
1) Interaction between privileged and non-privileged pages
2) How to create my own HTMLEvent onMyOwnEvent
01.12.2009
DaSpors 4,2k 2 8
DaSpors 4,2k 2 8
Super
Vielen Dank für deine Antwort.
Hat mir sehr weitergeholfen.

huckepick
huckepick 04.12.2009
Na dann könntest Du sie ja als Antwort akzeptieren :)
DaSpors 04.12.2009
1
Hmm also soweit ich weiß gibts beim Webbrowser Control ein Scripting Objekt, mit diesem werden Methoden zur Verfügung gestellt, um ein Event vom Javascript in die C# Umgebung zurück zu geben. Ich nehme mal an dass das geckoWebBrowser Control nur irgendwie abgeleitet ist - es müsste also etwas ähnliches geben.
Da du die Website ja ehh erstellst, kannst du die entsprechenden Javascript Links gegen die Scripting-Object Methoden (window.external) austauschen und bekommst somit die Events zurück.

Schau dir dazu mal folgendes an:
http://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser.objectforscripting.aspx

Grüßle
30.11.2009
Scout 1,4k 2 8
Scout 1,4k 2 8

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH