Pebble.js: 将现有选项传递给 webview

Pebble.js: Passing existing options to webview

docs 解释了如何从 webview 中获取数据 out,但没有解释如何将数据 into 传递。

现在,我在 open 回调中设置了一个虚拟变量和 return 正确的 URL:

function onSettingsOpen(e) {
    var options = Settings.option();
    return URL_ROOT + '/settings?options=' + encodeURIComponent(JSON.stringify(options));
}

Settings.config(
    { url: 'DUMMY' },
    onSettingsOpen,
    onSettingsUpdated
);

(我通过反复试验发现了这一点。文档中没有任何地方提到它。)

如果我将 URL 直接传递给 Settings.config(而不是每次都计算它),则会发生以下情况:

  1. 打开设置页面→webview获取数据。
  2. 进行一些更改并保存 → 应用获取新数据。
  3. 再次打开设置页面 → webview 获取过时数据。

设置将选项传递给 webview 的方式与预期将选项传递回 pebble.js 的方式相同;也就是说,作为 URI 编码的 JSON 对象,在哈希“#”符号后添加后缀。在您的配置页面中,您将使用

JSON.parse(decodeURIComponent(window.location.hash.substr(1)))

获取选项。您可以通过在配置页面中将 window.location 显示为调试输出来查看这一点。假设你有一个 jQuery-like:

$('.some-element').text(window.location)

如果您的配置页面由动态服务器提供,它将不会收到选项,因为 URLs 的散列部分不会发送到服务器。因此,要将选项传递给服务器,必须构造 URL。虽然这似乎是一个巨大的限制,但之所以选择这种方式是因为它不强制使用某种查询格式。示例格式是单个查询参数中的所有设置或分散多个查询参数的选项。

话虽如此,也许我可以接受一个模板 URL 来自动化第二大用例,它是单个查询参数中的所有设置。像

// Non-functioning feature request
Settings.config({ url: 'http://server/settings?options=${options}' }, ...)