使用window.external.notify从C#函数返回一个值

时间:2014-08-28 06:45:43

标签: c# cordova windows-phone-8

我正在使用phonegap为windows phone 8制作应用程序。我使用window.external.Notify([commandname])从我的javacript调用了C#函数。它正确地调用了C#代码。但我想从我的C#代码返回一个字符串值回到该javascript函数。 为解决方案 - 我尝试使用InvokeScript()方法调用javascript函数并将结果作为参数传递给它。但它给了我OutOfMemoryException

我的C#代码是 -

 public MainPage()
        {
            InitializeComponent();
            this.CordovaView.Loaded += CordovaView_Loaded;
            CordovaView.Browser.ScriptNotify+=Browser_ScriptNotify;


        }

        private void Browser_ScriptNotify(object sender, NotifyEventArgs e)
        {
            string commandStr = e.Value.ToString();
            IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings;
            //get the key data
            if (commandStr == kToken + "-get" || commandStr == kMSISDN + "-get" || commandStr == kTermsAccepted + "-get" || commandStr == kUserDetails + "-get")
            {
                string[] keys = commandStr.Split('-');
                key = keys[0];
                if (!settings.Contains(key))
                {
                    sampledata = null;

                }
                else
                {
                    sampledata = (string)settings[key];

                }
                this.CordovaView.Browser.IsScriptEnabled = true;
                this.CordovaView.Browser.InvokeScript("mydata", data);
            }
            else(commandStr == "removedata")
            {
                settings.Clear();
            }
        }

        private void CordovaView_Loaded(object sender, RoutedEventArgs e)
        {

            this.CordovaView.Loaded -= CordovaView_Loaded;

        }
    }


}

以下是我的javascript代码 -

function getDataForKey(key) {
         window.external.Notify(key + '-get');
         senddata: return data;
}

function mydata(inputdata)
{
    alert(inputdata);
    data = inputdata;
    alert('Invoked script is running');
    goto: senddata;
}

请帮我解决这个问题。我是phonegap的新手。所以我无法理解如何从javascript调用C#,反之亦然。我也在寻找phonegap文档中的解决方案,但没有任何解脱。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

如果你想使用PhoneGap / Cordova并以独立于平台的方式做你尝试做的事情,那么cordova插件机制可以提供帮助。你应该实现自己的cordova插件:

请参阅Plugin Development Guide

Windows原生端实现细节为here