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

Mik*_*ant 7 javascript c# 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

}
Run Code Online (Sandbox Code Playgroud)

ben*_*nka 9

尝试:

webBrowser.InvokeScript("myFunction", "one", "two", "three");
Run Code Online (Sandbox Code Playgroud)

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(); " });
Run Code Online (Sandbox Code Playgroud)


Mik*_*ant 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;
    } 
}
Run Code Online (Sandbox Code Playgroud)

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

 public HomePage()
 {
      InitializeComponent();
      CordovaView.Loaded += CordovaView_Loaded;
      WebViewHandler.getInstance().setWebView(ref CordovaView); 
 }
Run Code Online (Sandbox Code Playgroud)

设置 WebView 后,我可以从任何其他类调用 InvokeScript:

WebViewHandler.getInstance().webView.CordovaBrowser.InvokeScript("MyJavaScriptFunctionThatIWishToCall");
Run Code Online (Sandbox Code Playgroud)