使用Chrome 35及更高版本启用非Play商店用户脚本

时间:2014-06-07 07:44:18

标签: javascript google-chrome google-chrome-extension userscripts

自谷歌浏览器版本35以来,在Google PlayStore之外安装的任何扩展程序的执行都被阻止,并且无法通过扩展程序菜单启用。

两年前删除了非商店脚本的自动安装,但下载了脚本并执行了拖放操作。在扩展菜单上放置仍然允许安装,因此仍然可以为Google的Chrome创建和共享脚本。但现在一切都被锁定了。

  • 是否可以手动为独立脚本添加权限?
  • 是否可以将个人网站列入白名单?
  • 还有其他解决方案吗?

我知道此限制不适用于devcanary发布渠道,但脚本的目的是让有足够知识的用户知道他们做了什么,而不强迫他们更改他们的浏览器。本机支持支持在Chrome上相当有用(即使现在完全锁定),所以没有第三方插件的解决方案(即:Tampermonkey)更好

谢谢

4 个答案:

答案 0 :(得分:13)

除了安装像Tampermonkey这样的扩展程序或获取其他浏览器之外,似乎还剩下唯一的方法就是启动带有--enable-easy-off-store-extension-install标记的Chrome浏览器。

修改:不幸的是,Google removed this flag from Chromium in April

但是,如果用户(或任何程序)在没有此标志的情况下启动Chrome,则会自动禁用脚本。即使使用正确的标志,也无法重新启用它们;您唯一的选择是卸载它们,然后在简易的店外扩展安装模式下重新安装。

所以,你的选择是:

  1. Start Chrome with the --enable-easy-off-store-extension-install flag every time。如果您已将Chrome固定到Windows 7中的任务栏,则更改此快捷方式的命令行参数的方法为described here
    如果您已将Chrome设置为HTTP和HTTPS的默认协议处理程序协议(如果您将Chrome设置为默认浏览器就是这种情况),您可以modify the registry所以每次程序尝试使用默认程序打开HTTP或HTTPS URL时都会设置此标志。
    确定你set this argument for file extensions Chrome is configured to open,例如.xht.htm.xhtml。 您可以使用以下.reg文件执行此操作:

    Windows Registry Editor Version 5.00
    
    [HKEY_CLASSES_ROOT\ChromeHTML\shell\open\command]
    @="\"C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe\" --allow-easy-off-store-extension-install -- \"%1\""
    

    确保安装Chrome时,Chrome的路径正确无误。

  2. 安装Tampermonkey等扩展程序以管理用户脚本。
  3. 安装其他浏览器,developer builds Chrome浏览器或完全不同的浏览器,例如Opera(包含native support for user scripts)或FirefoxScriptish })。
  4. 在收到第35版之前
  5. Blocking Chrome updates并且有遭受黑客入侵的风险。
  6. 切换到其他操作系统,如extensions are only blocked on Windows
  7. 如果您的计算机属于Windows域,则可以install extensions using Group Policy
  8. 将用户脚本转换为bookmarklet。
  9. 我意识到这可能不是你想听到的,但是由于谷歌继续限制诚实的开发者,因为有一些不好的玩家没有更好的选择。

    编辑:还有一种我发现有效的方法,即使用正确的权限劫持已安装的扩展程序:

    1. 查找并安装有权在您希望其运行的网页上运行内容脚本的扩展程序。例如,Note Anywhere扩展名有权在为任何HTTP或HTTPS URI加载文档时注入用户脚本。
    2. 转到扩展程序页面,找到扩展程序的ID。
    3. 打开Chrome存储扩展程序的文件夹。在Windows上,这是%localappdata%\Google\Chrome\User Data\Default\Extensions
    4. manifest.json中,找到已注入脚本的名称和位置。使用您的用户脚本覆盖此文件的内容。 (在选择扩展名的情况下,这是asset/stickies.js
    5. 删除manifest.json中未引用的扩展程序的所有内容。将任何未使用的引用脚本和HTML页面替换为emtpy文件。
      对于上面提到的扩展,除了图标,内容脚本asset/stickies.css和{{1用空文件替换后两个。
    6. 转到Chrome扩展程序页面,然后停用,然后重新启用扩展程序。
    7. 如果扩展程序已更新,请备份您的工作。
    8. 在某处注明扩展程序列表中的扩展程序已将其内容替换为您的用户脚本。

答案 1 :(得分:13)

编辑:我验证了这个解决方案,因为它是帮助我的,尤其是在这个问题上。 更丰富的答案是the list of workarounds submited by user2428118 。即使他们没有解决我的具体问题,也应该考虑他们。

感谢the link posted by yoz,我终于找到了问题的答案,事实是你仍然可以启用与PlayStore无关的脚本,而不需要任何第三方插件,但正如你所看到的那样:使用TamperMonkey可能会更好(即使它可能意味着很少的改编,它会更容易200%)。

解决方案是以开发者模式导入解压缩的用户脚本

逐步说明

  1. 通常

  2. 创建用户脚本myscript.user.js
  3. 将其包含在目录中并创建名为manifest.json的文件。您将获得此结构(可以压缩以便分发):

      

    的MyScript /

         
        
    • 的manifest.json
    •   
    • myscript.user.js
    •   
  4. manifest.json是将您的脚本作为Chrome扩展程序导入开发人员所需的文件。它描述了您的用户脚本。这是相关的documentation,但我们目的的最小代码是:

     {
         "manifest_version":2,
         "version":"1.0",
         "name": "MyScript",
         "content_scripts": [
             {
                 "js": ["myscript.user.js"],
                 "matches": ["http://domain.com/"]
             }
         ]
     }
    
  5. 现在您的目录中包含您的用户脚本和manifest.json,您可以将其作为解压缩的扩展程序导入(在Chrome重启后,将打开一个打包的扩展程序 )。要实现这一点,只需检查"开发者模式"并选择"加载未包装的扩展..."。导航到在步骤2中创建的目录并选择它:" s" all"。

  6. Load Unpacked Extension

    赞成

    • 原生解决方案
    • 如果您在Chrome上开发脚本(显然这不是我的情况:P),您自然会这样做。
    • 您的脚本现在被视为"真实"扩展。

    缺点

    • 哦,上帝......我错过了一键安装:即使用户只需要完成第4步,它仍然很痛苦。
    • 看起来更少"专业"因为用户必须启用开发者模式
    • 不再是"跨浏览器"由于Google Chrome的脚本必须以特殊方式打包,因此分发
    • 无法在不破坏脚本的情况下(重新)移动原始目录
    • 每次Chrome打开时都会触发警告,询问您是否确定要使用开发者模式

    结论

    我喜欢用户脚本在Chrome上具有原生支持的方式:每个第三方插件都有一些小的变化(即:数据或xhr处理)。但缺点是重要的(尤其是最后两个)... 即使以原生方式启用非PlayStore脚本也是如此,我建议调整脚本以使其变得如此痛苦一个插件,如TamperMonkey 。毕竟,Chrome是一个例外,因为每个其他浏览器都需要一个插件,现在这些插件是唯一的方法。

    我仍然感到有些失望,所以如果有人碰巧找到了更好的解决方案(仍然希望有一些白名单),我会很乐意提供一些赏金。

    编辑:请注意user2428118 provided a list其他有趣的解决方法。即使他们没有解决我的特定问题,也应该考虑它们。

    编辑:显示已修复

答案 2 :(得分:5)

solution number 1 from @user2428118 answer的延续。

为了确保您始终启动Chrome,--enable-easy-off-store-extension-install为您的标记,可以使用(除了编辑菜单启动中的所有快捷方式等)registry file

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\http\shell\open\command]
@="\"C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe\" --enable-easy-off-store-extension-install -- \"%1\""

[HKEY_CLASSES_ROOT\https\shell\open\command]
@="\"C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe\" --enable-easy-off-store-extension-install -- \"%1\""

C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe替换为系统中chrome.exe的实际路径。

答案 3 :(得分:3)

不幸的是,除了像Tampermonkey这样的扩展外,似乎没有好的解决方法,因为你的脚本的生成方式对每个用户都不同。

这是我发现的最佳解释:

http://www.chromium.org/developers/extensions-deployment-faq