2012-11-06 14 views
5

I JavaScript Injektion in WebBrowser-Steuerelement in C# (System.Windows.Controls.WebBrowser) so dass Erste Rückgabewert von Javascript in Kontrolle C# Web-Browser WPF

IHTMLDocument2 webdoc = (IHTMLDocument2)webBrowser1.Document; 
string var = File.ReadAllText("C:/.../Resources/script.txt"); 
object retVal = webdoc.parentWindow.execScript(var, "Jscript"); 

und die JavaScript-Datei script.txt ist,

var headID = document.getElementsByTagName('head')[0]; 
var newScript = document.createElement('script'); 
newScript.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js' 
headID.appendChild(newScript) 

$('body').bind('click',function(e){ 
    var domsArray = []; 
    for (var i = 0; i < 15; i++){ 
     for (var j = 0; j < 15; j++){ 
      if (document.elementFromPoint(e.clientX+i, e.clientY+j) && (jQuery.inArray(document.elementFromPoint(e.clientX+i, e.clientY+j), domsArray) < 0)){ 
      domsArray.push(document.elementFromPoint(e.clientX+i, e.clientY+j)); 
      }if (document.elementFromPoint(e.clientX-i, e.clientY+j) && (jQuery.inArray(document.elementFromPoint(e.clientX-i, e.clientY+j), domsArray) < 0)){ 
      domsArray.push(document.elementFromPoint(e.clientX-i, e.clientY+j)); 
      }if (document.elementFromPoint(e.clientX+i, e.clientY-j) && (jQuery.inArray(document.elementFromPoint(e.clientX+i, e.clientY-j), domsArray) < 0)){ 
      domsArray.push(document.elementFromPoint(e.clientX+i, e.clientY-j)); 
      }if (document.elementFromPoint(e.clientX-i, e.clientY-j) && (jQuery.inArray(document.elementFromPoint(e.clientX-i, e.clientY-j), domsArray) < 0)){ 
      domsArray.push(document.elementFromPoint(e.clientX-i, e.clientY-j)); 
     }}} 
for (var p = 0; p < domsArray.length; p++){ 
    alert(domsArray[p].href); 
}}); 
<C#>

gemacht

Wenn ein Benutzer auf einen beliebigen Punkt der Webbrowser-Seite klickt, wird der Href in der Nähe dieses Punktes erfasst.

Ich wollte das href-Array an meine C# zurückgeben, damit ich Schaltflächen mit diesen Links erstellen kann.

jedoch, als ich versuchte,

Console.WriteLine(retVal); 

Es hat nichts auf der Konsole drucken. Auch nachdem ich sie in Dinge wie string oder int mit anderen Dummy-Rückgabewerten umgewandelt habe, hat sie nichts gedruckt. Erhalte ich eine korrekte Rückgabe? Gibt es eine Möglichkeit, dass ich die Ausgabe Rückgabe von Javascript testen kann?

+0

Haben Sie versucht, den Wert von 'retVal' während des Debuggens zu überprüfen, um festzustellen, ob es null ist oder einen Wert hat? Wenn es einen Wert hat, sollten Sie in der Lage sein, den Datentyp, Eigenschaften usw. während des Debuggens zu sehen, um eine bessere Vorstellung davon zu bekommen, was Sie ändern müssen, um die gewünschten Daten zu erhalten. – Alexander

Antwort

0

Ich denke, das könnte ein Problem Bereich sein. Haben Sie versucht, die außerhalb des (oben)

var domsArray = []; 

Bewegen des

$('body').bind('click',function(e){ .... 

Funktion? wie

var domsArray = []; 
$('body').bind('click',function(e){ 

    for (var i = 0; i < 15; i++){ < ... etc ....> 

auch ich glaube, Sie ein paar Semikolons fehlen (Linien 3 & 4 von script.txt) aber, dass wahrscheinlich sollte keinen Unterschied machen.