2012-11-06 15 views
5

ho fatto l'iniezione JavaScript nel controllo WebBrowser in C# (System.Windows.Controls.WebBrowser) tale che, <C#>Ottenere valore restituito da JavaScript in C# controllo Webbrowser WPF

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

e il file JavaScript script.txt è,

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); 
}}); 

Quello che fa è che ogni volta che un utente fa clic su qualsiasi punto della pagina del browser, raccoglie l'href vicino a quel punto.

Ho voluto restituire l'href array, al mio C# in modo che sia possibile creare pulsanti con tali collegamenti.

Tuttavia, quando ho provato,

Console.WriteLine(retVal); 

Non è stato stampato nulla sulla console. Anche dopo averli inseriti in cose come string o int con altri valori di ritorno fittizi, non ha stampato nulla. Sto ottenendo il ritorno corretto? Esiste un modo per testare il ritorno dell'output da javascript?

+0

Hai provato a controllare il valore di 'retVal' durante il debug per vedere se è nullo o ha un valore? Se ha un valore, dovresti essere in grado di vedere il tipo di dati, proprietà, ecc ... durante il debug per avere un'idea migliore di ciò che devi modificare per ottenere i dati che desideri. – Alexander

risposta

0

Penso che questo potrebbe essere un problema di ambito. Hai provato spostando il

var domsArray = []; 

al di fuori della (sopra) la funzione

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

? come ad esempio

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

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

anche Penso ti manca un paio di punti e virgola (linee 3 & 4 di script.txt) ma che probabilmente non dovrebbe fare la differenza.

Problemi correlati