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
(而不是每次都计算它),则会发生以下情况:
- 打开设置页面→webview获取数据。
- 进行一些更改并保存 → 应用获取新数据。
- 再次打开设置页面 → 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}' }, ...)
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
(而不是每次都计算它),则会发生以下情况:
- 打开设置页面→webview获取数据。
- 进行一些更改并保存 → 应用获取新数据。
- 再次打开设置页面 → 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}' }, ...)