我已经编写了一个简单的前端网络应用程序,可以在浏览器中正常运行,我想在Chrome网上商店中使用它。然而,事实证明这是一个巨大的痛苦,我担心会有一些我没有得到的东西。&/ p>
我首先将一个manifest.json文件添加到项目中。它与Firefox的manifest.webapp文件略有不同,但无论如何,没有直接的冲突,所以我只需添加一些额外的参数并复制其余参数。
看起来我需要一个后台脚本来启动我的应用程序,否则它只会被视为扩展而不是在自己的窗口中打开的应用程序。很复杂,但我想它让我可以更好地控制我的应用程序如何启动,所以它是有道理的。所以我在清单中加上这样的东西:
{
"background": {
"scripts": ["main.js"]
}
}
然后在main.js中我有这样的东西:
chrome.app.runtime.onLaunched.addListener(function() {
var screenWidth = screen.availWidth;
var screenHeight = screen.availHeight;
var width = 500;
var height = 300;
chrome.app.window.create('index.html', {
id: "myapp",
outerBounds: {
width: width,
height: height,
left: Math.round((screenWidth-width)/2),
top: Math.round((screenHeight-height)/2)
}
});
});
现在我的应用程序启动正常,但我在控制台中收到错误:window.localStorage is not available in packaged apps. Use chrome.storage.local instead.
。奇怪的是我不能使用W3规范的localStorage标准。查找chrom.storage.local,它甚至不使用标准的localStorage语法。 getItem
代替get
,导致在localStorage周围使用光包装器而不修改现有代码时出现问题。
所以我的问题:如果谷歌希望开发人员想要在Chrome网上商店获得应用程序,或者我是否会误解某些内容,这是否真的是他们想要通过的?
答案 0 :(得分:4)
考虑什么是" Chrome应用程序"是
您尝试构建的是之前称为&#34;打包的应用程序&#34;,a self-contained, nearly native application。因此,预计开发人员会遵循一组略有不同的规则。正如RobW所提到的,您可以使用<webview>
标记将您的网络应用嵌入到该用户界面中,但这可能不是您想要做的。
如果您希望网络应用程序出现在商店中,并且此应用程序已在某个地方托管,并且您不希望将UI与普通浏览器分开,则您需要查看错误的应用程序类型。
.webapp
定义的应用与Chrome术语中的Hosted Apps相对应。它只是连接到现有Web应用程序的元数据文件,您可以在商店中列出。
答案 1 :(得分:1)
Chrome应用程序是一个应用程序平台,如Windows,OS X,Android,Linux等。因此,它们有一组独特的要求和约束。
这是否真的是Google希望开发人员如果愿意的话 在Chrome网上商店获取应用,或者我非常可怕 误解了什么?
您所询问的似乎是如何在Chrome网上应用店中轻松列出内容。从这个角度来看,你的挫败感是可以理解的:要获得超低价的分销,你希望开发人员的努力能够超低。但是使用你的术语是“可怕的误解”。廉价分销可能是你的目标,但它不是谷歌的。 Chrome应用平台是一个独特的应用平台,专门用于确保应用在Chromebook和其他Chrome操作系统设备上运行良好。顺便说一下,是的,生态系统的一部分是一个有助于分发的商店。但这只是该平台开发的一小部分。
查看https://developer.chrome.com/apps/about_apps并试用一些示例应用。你会发现Web开发的好处仍然存在,但是坏的部分(像localStorage这样的同步API,面向页面的生命周期模型,危险的内联脚本)被删除了,而全新的部分(新的硬件和UI API,非常好)增加了离线行为,更好的分发和更强大的安全模型。
Chrome Apps平台非常精简,适合同样精简的Chrome操作系统。花一两天时间沉浸其中。这很值得。编写一个高质量,优质的应用程序,适用于Chromebook,您所寻求的发行版自然会随之而来。