7

我正在使用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

}
4

4 回答 4

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(); " });
于 2013-11-12T11:08:43.660 回答
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");
于 2013-11-14T08:43:02.683 回答
1

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

于 2013-11-14T11:59:43.317 回答
0

试试这个例子:

string str="<script>alert(\"ok\");</script>";
Page.ClientScript.RegisterStartupScript(this.GetType(), "Script", str, false);
于 2013-11-19T08:32:21.527 回答