gpt4 book ai didi

javascript - Windows Phone 8 中的应用程序设置,使用 javascript

转载 作者:行者123 更新时间:2023-11-30 06:33:34 25 4
gpt4 key购买 nike

我正在使用 HTML5/JavaScript 为 WP8 开发应用程序。我在 JavaScript 的数组变量中收集用户设置,非常想保存这些以供将来使用。并将它们保存在漫游设置中以更加精确。

经过一些研究,这似乎是不可能直接从 js 实现的。我发现在 Windows 8 中执行此任务的 API 调用在 WP8 下不起作用。所以我唯一能想到的解决方法是结构:

1) 当我想保存数据时,从我制作的js

window.external.notify("LaunchSaveProcess"); 

向浏览器发送通知。

2) 在 XAML 文件中

<phone:WebBrowser ScriptNotify="Catch_Script_Notification" /> 

将通知从浏览器传送到 C#

3) 在c#中捕捉通知

private void Catch_Script_Notification(object sender, NotifyEventArgs e)
{ if (e.Value.StartsWith("LaunchSaveProcess")) {
//"important function"
} }

4) “重要函数”调用JavaScript中的一个方法,返回用户设置数组,然后使用

var userSettings = Browser.InvokeScript("getSettings()");
var roamingSettings = Windows.Storage.ApplicationData.Current.RoamingSettings;
roamingSettings.Values["settings"] = userSettings;

现在几个问题。这个模型是否正确,或者有更简单的方法吗?您可以在制作通知事件时以某种方式将参数直接从 JavaScript 传递到 c# 吗?我可以将数组直接保存到 roamingSettings 中,还是需要将其分解并单独保存所有内容?

为澄清起见,usersettings 数组是一维数组,我在其中推送带有“键”和“值”对的对象。所以我可以轻松访问循环内的内容userSettings[i].key 和 .value 语法。

最佳答案

从 C# 回调 JavaScript 的另一种方法是一次传递通知字符串中的所有数据。

从您的 JavaScript 端,生成数据的 JSON 表示非常容易。然而,在 C# 端,您必须声明 DataContractJsonSerializer 需要解释此数据的 DataContract,这需要更多工作。

接受一维键/值对数组的 JavaScript 辅助函数:

function saveUserSettings(valuesToSave) {
var notifyObject = { command: "saveUserSettings", values: valuesToSave };
var notifyObjectString = JSON.stringify(notifyObject);
window.external.notify(notifyObjectString);
}

// call it like this...
saveUserSettings([{ key: "key1", value: "value1" },
{ key: "key2", value: "value2" }]);

C# 契约:

using System.Runtime.Serialization;

[DataContract]
public class JsonScriptData
{
[DataMember(Name = "command")]
public string Command { get; set; }

[DataMember(Name = "values")]
public JsonUserSetting[] Values { get; set; }
}

[DataContract]
public class JsonUserSetting
{
[DataMember(Name = "key")]
public string Key{ get; set; }

[DataMember(Name = "value")]
public object Value { get; set; }
}

并且您的浏览器脚本通知变为:

    private void BrowserOnScriptNotify(object sender, NotifyEventArgs notifyEventArgs)
{
var str = notifyEventArgs.Value;
var serializer = new DataContractJsonSerializer(typeof(JsonScriptData));
var bytes = Encoding.UTF8.GetBytes(str);

JsonScriptData commandData;
using (var memoryStream = new MemoryStream(bytes))
{
commandData = (JsonScriptData)serializer.ReadObject(memoryStream);
}

// save out to application settings dictionary
var applicationSettings = IsolatedStorageSettings.ApplicationSettings;
foreach (var value in commandData.Values)
{
applicationSettings[value.Key] = value.Value;
}
applicationSettings.Save();
}

当然,您可以将来自 JS 的整个用户设置 JSON 字符串作为单个值保存到 IsolatedStorageSettings 中,这意味着 C# 甚至不需要解析它。

关于javascript - Windows Phone 8 中的应用程序设置,使用 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16021867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com