如何从C#调用JavaScript - Cordova / PhoneGap

时间:2013-11-08 16:55:06

标签: c# javascript cordova windows-phone-8

我正在使用cordova / phonegap制作Windows手机应用程序,我正试图在事件发生时从C#调用脚本。

有没有这样做?

到目前为止这是我的班级。

public void register(string options)
{
        // This is executed asynchronously
        if (!TryFindChannel())
            DoConnect();
}


void httpChannel_ChannelUriUpdated(object sender, NotificationChannelUriEventArgs e)
{
        // Finished asynchronous task in "register" method
        Trace("Channel opened. Got Uri:\n" + httpChannel.ChannelUri.ToString());
        SaveChannelInfo();

        Trace("Subscribing to channel events");
        SubscribeToService();
        SubscribeToNotifications();

        // SEND CHANNEL URI TO JAVASCRIPT

}

4 个答案:

答案 0 :(得分:9)

尝试:

webBrowser.InvokeScript("myFunction", "one", "two", "three");

InvokeScript执行当前加载的文档中定义的脚本函数,并将函数传递给字符串参数数组。
http://msdn.microsoft.com/en-us/library/windowsphone/develop/ff402838%28v=vs.105%29.aspx

显然,您必须在加载的文档中定义JavaScript函数。

根据您的观点,它可能会这样:

this.CordovaView.Browser.InvokeScript("eval", new string[] { "yourJavascriptFunction(); " });

答案 1 :(得分:4)

我找到了一个解决方案,当然不是最好的解决方案,但对我有用。

我创建了一个名为WebViewHandler的单例类,看起来像这样

class WebViewHandler
{
    private static WebViewHandler instance;
    public bool isWebViewReady { get { return webView != null; } }
    public WPCordovaClassLib.CordovaView webView;

    private WebViewHandler()
    {

    }

    public void setWebView(ref WPCordovaClassLib.CordovaView webView)
    {
        this.webView = webView;
    }

    public static WebViewHandler getInstance()
    {
        if(instance == null){
            instance = new WebViewHandler();
        }
        return instance;
    } 
}

然后我在HomePage的构造函数中设置webview,如下所示:

 public HomePage()
 {
      InitializeComponent();
      CordovaView.Loaded += CordovaView_Loaded;
      WebViewHandler.getInstance().setWebView(ref CordovaView); 
 }

一旦设置了WebView,我就可以从任何其他类调用InvokeScript:

WebViewHandler.getInstance().webView.CordovaBrowser.InvokeScript("MyJavaScriptFunctionThatIWishToCall");

答案 2 :(得分:1)

你可以使用DispatchCommandResult();如cordova文件中所述。这样你就可以调用c#方法,在回调中发送你需要的任何内容,然后只需在javascript中执行javascript。

答案 3 :(得分:0)

试试这个例子:

string str="<script>alert(\"ok\");</script>";
Page.ClientScript.RegisterStartupScript(this.GetType(), "Script", str, false);