【问题标题】:How to call JavaScript from C# - Cordova/PhoneGap如何从 C# 调用 JavaScript - Cordova/PhoneGap
【发布时间】:2013-11-19 16:32:21
【问题描述】:

我正在使用cordova/phonegap 制作一个windows phone 应用程序,我正在尝试在事件触发时从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

}

【问题讨论】:

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


【解决方案1】:

试试:

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

【讨论】:

  • 我正在尝试从我的自定义插件类中执行此操作,该类继承自 BaseCommand,据我所知,该类没有引用 webview。
  • 嗨@benka 我正在用与您编写的相同的方式从c#调用我的js函数,但我无法调用,并且我得到异常编号x800088,这没有提供具体原因,你能告诉我为什么我无法调用我的功能,我打电话如下。 myBrowser.InvokeScript("myFun", "val1", "val2");或字符串[] 参数={"val1","val2"}; myBrowser.InvokeScript("myFun", params);以上两者都不起作用。 :(
【解决方案2】:

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

我创建了一个名为 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");

【讨论】:

  • 不错的一个:) 很高兴您找到了解决方案并发布了它
  • 没问题,希望它能像我一样节省其他人的搜索时间。
【解决方案3】:

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

【讨论】:

  • 我正在等待一个事件来调用javascript,所以你不能调用tbe c#方法
【解决方案4】:

试试这个例子:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多