谷歌Chrome应用程序-如何检查是应用程序还是常规网站

3

我正在开发一个可以作为Chrome扩展和常规网站运行的项目。

如何在JavaScript中测试检查是否在Chrome扩展程序中运行?(即某些功能只能在Chrome下工作)

仅供参考,这是我的Chrome扩展程序清单,请注意我是在开发者模式下运行的(直接从源代码运行,尚未打包)

{
    "manifest_version": 2,
    "name": "Example KIOSK APP",
    "version": "1.1",
    "icons": {
        "16": "images/icon-16.png",
        "48": "images/icon-48.png",
        "128": "images/icon-128.png"
    },
    "app": {
        "background": {
            "scripts": ["background.js"],
            "persistent": true
        }
    },
    "kiosk_enabled": true,
    "offline_enabled": true,
    "permissions": [
        "system.display",
        "power",
        "webview",
        "fileSystem",
        "alwaysOnTopWindows",
        "system.storage",
         "<all_urls>"
    ]
}

任何建议都将不胜感激。

重新表述一下:如果您的应用程序代码可以运行(background.js、您创建的窗口),那么您就在一个应用程序中。您想将信息“我来自Chrome应用程序”传递给<webview>内部的页面。是这样吗?如果是,请编辑问题以澄清。 - Xan
@Xan 我计划使用类似于Modernizer的功能,只需在body上添加一个类来说明我的位置(例如添加一个类chromeApp,或者只是chrome,甚至是no-chrome)。 - Iladarsda
我可以从background.js访问DOM吗?或者这被认为是不好的实践吗? - Iladarsda
什么的DOM?<webview>标签内的页面? - Xan
windows.html/index.html的DOM(我从background.js调用的页面) - Iladarsda
显示剩余3条评论
3个回答

8
原来问题是要区分在网页中运行的相同代码和在(常规)Chrome应用窗口内部运行的代码。
只需测试对常规页面不公开的Chrome应用API即可。一个例子就是检测app.runtime
if (window.chrome && chrome.app && chrome.app.runtime) {
  // Running inside a Chrome App context
} else {
  // Either not Chrome, or not as an app window
}

2
编辑:这个答案与这个特定问题无关,但我认为我会保留它以防有人在托管应用程序方面遇到类似的问题。
我猜你所说的“作为Chrome App运行”是指托管的Chrome应用
在这种情况下,只需要从网站代码中检查chrome.app.isInstalled即可。在文档中很难找到这个功能,因为它似乎在某个时候被省略了,但我会把这个链接作为参考。我刚刚检查了一下,它仍然有效。
因此:
// Website code
if (window.chrome && chrome.app && chrome.app.isInstalled) {
  // App is installed
} else if (chrome) {
  // In Chrome, but app is not installed: offer inline install?
} else {
  // Not in Chrome at all
}

有趣的是,在APP下chrome.app.isInstalled返回false。不确定在直接从源代码(开发者模式)运行时托管是否相同。 - Iladarsda
好的,请给我一分钟。 - Iladarsda
我不相信这样就足够了。托管的应用程序可以安装,但您可能正在从常规网站运行。 - dave

0
我正在寻找一种方法来确定Chrome是以单页模式启动的--app=https://example.com,还是作为完整的浏览器(带有选项卡、菜单等)。
以上的答案似乎不适用于这种情况,因为它不是一个“已安装”的应用程序。(Chrome应用程序支持已经停止了,对吧?)
是否有一种方法可以检测页面是否是使用--app打开的?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接