2012-03-18 15 views
10

एक बुनियादी ऐप बनाने के लिए मैं awesomium कोशिश कर रहा हूँ का उपयोग कर ग # से जावास्क्रिप्ट बुला, मैं < ----> ग # संचार js परीक्षण रहा हूँ, लेकिन यह काम अच्छी तरह से नहीं लगता है ... मैं एक स्थानीय एचटीएमएल बनाने और it..so खोलने दूर तो good..but जब मैं कोशिश कॉल js कुछ नहीं, कोई त्रुटि, कोई बग, कुछ भी नहीं, बस इस js फोन नहीं करता है ..awesomium

मेरी बुनियादी js कोड है:

var base = { 

    newItem : function(item){ 
    $("#botones").append('<div class="botonMenu">' + item + '</div>'); 
    }, 

    other : function(){ 
     alert("hi!!"); 
    } 

    } 

अगर मैं इस के अंदर फ़ायरबग परीक्षण स्पष्ट रूप से मैं अच्छी तरह से मेरे कार्यों कॉल कर सकते हैं और आइटम बनाए जाते हैं या चेतावनी बॉक्स ...

now..my सी # कोड इस

//I've wrote this code inside the winForms sample..but change the code for load 
//my local file and call js.... 


WebCore.BaseDirectory = @"C:\Documents and Settings\ME\dummytests\codes\views"; 
webView.LoadFile("base.html"); 


JSValue param1 = new JSValue("nameItem"); 
webView.CallJavascriptFunction("base", "other"); 
webView.CallJavascriptFunction("base","newItem", param1); 
webView.Focus(); 

फ़ाइल लोड अच्छी तरह से है, लेकिन js संचार बहुत बहुत धन्यवाद काम नहीं किया है और मैं मेरी मदद कर सकते आशा ... इस awesomium सचमुच कमाल देखने

+0

क्या आप वेबकोर अपडेट कर रहे हैं? – Venatu

उत्तर

4

समस्या यह है कि आप लोडिंग समाप्त होने से पहले पृष्ठ पर जावास्क्रिप्ट को कॉल करने का प्रयास कर रहे हैं। यदि लोड पूरा होने के बाद तक आप प्रतीक्षा करते हैं, तो आपको इसे सही तरीके से निष्पादित करना चाहिए।

webView.LoadCompleted += ExecuteJavascript; 

WebCore.BaseDirectory = @"C:\Documents and Settings\ME\dummytests\codes\views"; 
webView.LoadFile("base.html"); 

...

private void ExecuteJavascript(object sender, EventArgs eventArgs) 
{ 
    JSValue param1 = new JSValue("nameItem"); 
    webView.CallJavascriptFunction("base", "other"); 
    webView.CallJavascriptFunction("base", "newItem", param1); 
    webView.Focus(); 
} 
0

यह Awesomium v1.7.0.5 के लिए एक समाधान है। यह जावास्क्रिप्ट "विंडो" ऑब्जेक्ट प्राप्त करने के लिए "JSObject" का उपयोग करता है। वहां से यह एक जावास्क्रिप्ट फ़ंक्शन को कॉल करता है जो "div" के टेक्स्ट को गतिशील रूप से सेट करने के लिए jQuery का उपयोग करता है। दस्तावेज़ तैयार होने पर फ़ंक्शन को कॉल करने के लिए यह jQuery का भी उपयोग करता है।

एक जावास्क्रिप्ट से सी # तरीकों कॉल करने के लिए JSObject.Bind विधि का उपयोग कर सकते हैं।

प्रमुख:

<script type="text/javascript"> 

    function setDivText(s) 
    { 
     $("#msgDiv").text(s); 
    } 

    $(document).ready(function() { 

     setDivText("This is the start up text."); 

    }); 
</script> 

बॉडी:

<body> 
<p>Test...</p> 
<p></p> 

<div id="msgDiv"></div> 

</body> 

सी #:

यह एक बटन क्लिक करें ईवेंट हैंडलर के अंदर "WebView" का नाम के साथ WPF Webcontrol उपयोग करता है।

using Awesomium.Core; 

    ... 

    private void Button1_Click(object sender, RoutedEventArgs e) 
    { 
    JSObject window = webView.ExecuteJavascriptWithResult("window"); 

    if (window == null) 
     return; 

    using (window) 
    { 
     window.InvokeAsync("setDivText", "You pressed button 1.");    
    } 
    }