2016-07-29 4 views
0

InvokeScript() 메서드는 null을 반환합니다.InvokeScript() 메서드가 null을 반환합니다.

자바 스크립트 :

function gpsToAddress(gpsX, gpsY) { 
    var coords = new daum.maps.LatLng(gpsX, gpsY); 
    geocoder.coord2detailaddr(coords, CallbackA)} 

    function CallbackA(status, result) { 
    if(status===daum.maps.services.Status.OK) 
    { 
     return result[0].jibunaddress; 
    } 
} 

와 C 번호 :

private void f_ret_gpstoaddress(double v_gps_x, double v_gps_y,out string v_address) 
{ 
    object[] args = { "gpsToAddress(" + v_gps_x + "," + v_gps_y + ");" }; 
    v_address = (string)webBrowser1.Document.InvokeScript("eval", args); 
    return; 
} 

private void button3_Click(object sender, EventArgs e) 
{ 
    f_ret_gpstoaddress(37.353933, 127.944739, out v_address); 
    MessageBox.Show(v_address); 
} 

'인수'와 'v_address는'null을 반환하고 메시지 박스도 null를 돌려줍니다. 일부 값을 반환하고 싶습니다. 제발, 도와주세요!

편집 : OK, 나는이 같은 C# 코드 편집 :

private string f_ret_gpstoaddress(double v_gps_x, double v_gps_y, out string v_address) 
     { 
      var args = "gpsToAddress(" + v_gps_x + "," + v_gps_y + ");" ; 
      v_address = webBrowser1.Document.InvokeScript("eval",new object[] { args }).ToString(); 
      return v_address; 
     } 

     private void button3_Click(object sender, EventArgs e) 
     { 
      f_ret_gpstoaddress(37.353933, 127.944739, out v_address); 
      MessageBox.Show(v_address); 
     } 

을 그래서, 인수가 null이 아니라 v_address 여전히 null입니다. 무슨 일 이니??

+0

어떤 솔루션 ?? –

답변

0

gpsToAddress 함수는 아무 것도 반환하지 않습니다. 그러나 프로세스가 완료되면 콜백 함수가 호출됩니다.

함수를 호출 할 때 콜백 함수를 전달하는 것이 좋습니다.

자세한 내용은이 스레드를보고하십시오 : Make async event synchronous in JavaScript

편집 : 위의 질문을 바탕으로 :

콜백 클래스를 생성

[System.Runtime.InteropServices.ComVisibleAttribute(true)] 
public class Callback 
{ 
    // allows an instance of Callback to look like a function to the script 
    // (allows callback() rather than forcing the script to do callback.callMe) 
    [System.Runtime.InteropServices.DispId(0)] 
    public void callMe(string v_address) 
    { 
     MessageBox.Show(v_address); 
    } 
} 

콜백와 전화 JS 기능 :

private string f_ret_gpstoaddress(double v_gps_x, double v_gps_y, out string v_address) 
{ 
    Callback cb = new Callback(); 
    var args = "gpsToAddress(" + v_gps_x + "," + v_gps_y + "," + cb);" ; 
    v_address = webBrowser1.Document.InvokeScript("eval",new object[] { args }).ToString(); 
    return v_address; 
} 

js 함수는 콜백 인수로 k는

function gpsToAddress(gpsX, gpsY, callback) { 
    function CallbackA(status, result) { 
     if(status===daum.maps.services.Status.OK) 
     { 
     callback(result[0].jibunaddress); 
     } 
     else { 
     callback(''); 
     } 
    } 

    var coords = new daum.maps.LatLng(gpsX, gpsY); 
    geocoder.coord2detailaddr(coords, CallbackA) 
} 

편집 2 (더미 샘플)

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     string javascript = @"<html><head><script type='text/javascript'>function gpsToAddress(param1, callback) { 
    function CallbackA() 
    { 
     callback(param1); 
    } 

    setTimeout(function() { CallbackA() }, 1000); 
}</script></head></html>"; 
    public Form1() 
    { 
     InitializeComponent(); 
     webBrowser1.DocumentText = javascript; 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     Callback cb = new Callback(); 
     webBrowser1.Document.InvokeScript("gpsToAddress", new object[] { 123, cb }); 
    } 
} 

[System.Runtime.InteropServices.ComVisibleAttribute(true)] 
public class Callback 
{ 
    // allows an instance of Callback to look like a function to the script 
    // (allows callback() rather than forcing the script to do callback.callMe) 
    [System.Runtime.InteropServices.DispId(0)] 
    public void callMe(string v_address) 
    { 
     MessageBox.Show(v_address); 
    } 
} 
} 
+0

답변 해 주셔서 감사합니다. 그러나 나는 이해하지 못한다. 더 설명 할 수 있을까요 ?? –

+0

OK, 이해했습니다. 그러나 'WindowsFormsApplication6.Callback'이 반환됩니다. 따라서 'WindowsFormsApplication6 not defined'예외가 발생합니다. –

+0

코드에 오류가 있습니다. 새 샘플에 더미 샘플을 넣습니다. – Silvinus

관련 문제