谷歌Chrome"应用程序快捷方式":如何自动加载JavaScript?

Gat*_*ler 29 javascript google-chrome web-applications google-chrome-extension

简介
Google Chrome具有一项功能,允许您创建网页快捷方式,使其看起来像传统的桌面应用程序.

例如,推特移动设备的快捷方式可能是

C:\Users\<username>\AppData\Local\Google\Chrome\Application\chrome.exe  --app=https://mobile.twitter.com/
Run Code Online (Sandbox Code Playgroud)

此应用程序的文件图标存储在

C:\Users\<username>\AppData\Local\Google\Chrome\User Data\Default\Web Applications\mobile.twitter.com\https_80
Run Code Online (Sandbox Code Playgroud)

我的问题
自从我使用此功能以来已经有一段时间了,我似乎记得您可以将自己的JavaScript文件添加到app文件夹中,该文件夹在加载应用程序时包含在内.但是,我找不到任何讨论此功能的文档,但我99%确定它存在.

如果此功能可用以及我需要创建哪些文件,是否有人有任何详细信息?

澄清

我基本上是使用Chrome的"应用程序快捷方式"打开一个网页,我希望这个网页每隔x秒刷新一次.但是,我无法控制此网页.

我确信在旧版本的Chrome中,这曾经是可能的......除非我生气.

Rob*_*b W 87

Chrome在应用模式下启动时,也会加载Chrome扩展程序及其内容脚本.

因此,您可以创建一个简单的扩展,在页面中注入JavaScript代码,如下所示:

1.创建一个manifest.json文件:

{
    "name": "Run code on twitter mobile",
    "version": "1.0",
    "manifest_version": 2,
    "content_scripts": [{
        "js": ["contentscript.js"],
        "matches": ["http://mobile.twitter.com/*"]
    }],
    "web_accessible_resources": ["script.js"]
}
Run Code Online (Sandbox Code Playgroud)

2.内容脚本

然后,创建一个名为的文件contentscript.js,并添加所需的JavaScript代码.
此脚本包含在匹配页面的每个负载中.通过document对象的所有DOM方法都是直接可用的.然而,windowdocument.defaultView没有指向window的页面对象[来源].

如果要访问全局方法或属性,则必须动态创建<script>并在页面中将其注入(请参阅构建Chrome扩展 - 使用内容脚本在页面中注入代码).

contentscript.js

var s = document.createElement('script');
s.src = chrome.extension.getURL('script.js');
(document.head||document.documentElement).appendChild(s);
s.onload = function() {
    s.parentNode.removeChild(s);
};
Run Code Online (Sandbox Code Playgroud)

3.将要注入的脚本.

然后,创建一个名为的文件script.js,并将其放在与manifest.json和相同的文件夹中contentscript.js.代码script.js执行就像它是受影响页面的真实部分一样.

此处提供了内容脚本的参考.

  • 要加载扩展,请导航到`chrome:// extensions /`,激活`Developer mode`,然后单击`Load unpacked extension`按钮.然后,选择包含`manifest.json`(和`contentscript.js`,`script.js`)文件的目录,然后确认.如果要在隐私浏览模式下测试扩展名,请展开说明,然后选中复选框.当您更新脚本时,您必须**单击"重新加载扩展名",以查看更改. (3认同)
  • @GateKiller你最好使用`setInterval(function(){location.reload(true);},30000);`不建议使用字符串作为`setTimeout`的参数.我用`setInterval`替换`setTimeout`来处理意外的导航取消(可能会破坏你的脚本).如果您真的喜欢这个功能,请使用`setTimeout(function(){location.reload(true);},3000);`. (2认同)