1

文档解释了如何webview中获取数据,但没有解释如何将数据传递它。

现在,我设置了一个虚拟变量并在open回调中返回正确的 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 获取陈旧数据。
4

1 回答 1

1

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

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

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

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

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

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

// Non-functioning feature request
Settings.config({ url: 'http://server/settings?options=${options}' }, ...)
于 2015-07-20T20:59:45.227 回答