使用 Chrome 35 及更高版本启用非 PlayStore 用户脚本

Posted

技术标签:

【中文标题】使用 Chrome 35 及更高版本启用非 PlayStore 用户脚本【英文标题】:Enable a non-PlayStore UserScript with Chrome 35 and above 【发布时间】:2014-07-28 12:02:18 【问题描述】:

自 Google Chrome 版本 35 起,在 Google PlayStore 之外安装的任何扩展程序的执行都会被阻止,并且无法从扩展程序菜单启用。

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

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

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

谢谢

【问题讨论】:

哦,谢谢你的通知,看来我毕竟需要开始使用金丝雀频道了。这种变化可能是最好的,尽管它对我个人的打击很大,因为它只会让人们更难测试我的开发扩展(这已经很不容易了) @Xan 注册开发者帐户很麻烦。我知道它比 appstore 好,而且它超级烦人的原因,它仍然是一个巨大的负担。支付 10 美元只是为了让您可以免费分发您的扩展程序而无需任何货币化也有点可悲。强迫信用卡付款并且不接受任何其他货币(甚至不是他们自己的)更糟糕。此外,您可能不想发布它,因为它仍在开发中,但您希望在完善时获得一些反馈,特别是如果您是新开发人员。我可以持续几个小时:) 我同意 10 美元的事情;他们制定这项政策时,我是祖父辈的,他们有正当理由,但这仍然很麻烦。至于开发版本,除了“公共”之外,还有几个发布选项可用。尽管如此,它还是让 TamperMonkey 成为了最佳途径——这对用户来说并没有太多额外的麻烦。 我知道,但是在这个新版本中,他们从“来吧,使用我们的商店更容易、更安全”到“来吧,你别无选择”,所以这就是为什么我要问得更好开发人员,如果仍有解决方法。 10 美元只是冰山一角。通过强制信用卡支付,他们获得了指向您的硬数据:姓名、地址、电话号码、信用评分等——然后他们可以将这些数据用于各种跟踪和营销目的。公司为这种集中的市场数据支付了数十亿美元。 Google 让您向他们付款。 【参考方案1】:

除了安装 Tampermonkey 之类的扩展程序或获取其他浏览器之外,似乎剩下的唯一方法是使用 --enable-easy-off-store-extension-install 标志启动 Chrome 浏览器。

编辑:很遗憾,Google removed this flag from Chromium in April。

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

所以,你的选择是:

    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 的路径正确。

    安装诸如Tampermonkey 之类的扩展程序来管理您的用户脚本。 安装不同的浏览器,可以是 Chrome 的developer builds,也可以是完全不同的浏览器,例如Opera(有native support for user scripts)或Firefox(有Scriptish)。 Blocking Chrome updates 在您收到第 35 版之前有被黑客入侵的风险。 切换到不同的操作系统,如extensions are only blocked on Windows。 如果您的计算机是 Windows 域的一部分,您可以install extensions using Group Policy。 将您的用户脚本变成书签。

我知道这可能不是你想听到的,但由于谷歌继续限制诚实的开发者,因为一些不良玩家没有更好的选择。

编辑:我发现还有一种可行的方法,即劫持具有正确权限的已安装扩展:

    查找并安装有权在您希望其运行的网页上运行内容脚本的扩展程序。例如,Note Anywhere 扩展有权在为任何 HTTP 或 HTTPS URI 加载文档时注入用户脚本。 转到扩展页面以查找扩展的 ID。 打开 Chrome 存储扩展的文件夹。在 Windows 上,这是%localappdata%\Google\Chrome\User Data\Default\Extensions。 在manifest.json中,找到注入脚本的名称和位置。用您的用户脚本覆盖此文件的内容。 (以选择的扩展名为例,这是asset/stickies.js。 删除manifest.json 中未引​​用的任何扩展内容。用 emtpy 文件替换您不使用的所有引用脚本和 HTML 页面。对于上述扩展,我将删除除图标、内容脚本、asset/stickies.cssbackground.html 之外的任何内容,并替换后两个带有一个空文件。 转到 Chrome 扩展程序页面并禁用然后重新启用扩展程序。 备份您的工作以防扩展程序更新。 在某处记下扩展列表中的扩展内容已替换为您的用户脚本。

【讨论】:

flag解决方案只要用这个flag打开Chrome就可以解决问题。它工作正常,即使您关闭并重新打开它(带标志),也无需在每次启动后手动启用。但是,如果您忘记一次且只有一次使用标志运行它,则用户脚本将被标记为“非网络商店”,甚至使用标志重新打开也不能解决问题(需要删除和重新安装脚本)。问题是系统或其他应用程序可能会在没有标记的情况下触发默认浏览器,因此您无法真正控制它。 选项概览。 第二种解决方案是我将在我自己的答案中所述使用的解决方案,因为其他解决方案对用户来说太“侵入性”。但是由于您的解决方案真的很完整,我会赞成它。 (你能用我关于标志的测试来编辑你的答案吗?) @Demurgos 我已经用您评论中的信息更新了我的答案。是的,我知道你已经提到 Tampermonkey,但为了完整起见,我将其包括在内。 @user2428118 “easy-off-store-extension”标志已从 Chromium 中删除了一段时间,请编辑您的答案以反映这一点。【参考方案2】:

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

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

解决方法是在开发者模式下导入解压后的用户脚本

分步说明

    像往常一样创建您的用户脚本myscript.user.js

    将它包含在一个目录中并创建一个名为manifest.json 的文件。你会得到这个结构(可以压缩分发):

    我的脚本/

    manifest.json myscript.user.js

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

     
         "manifest_version":2,
         "version":"1.0",
         "name": "MyScript",
         "content_scripts": [
             
                 "js": ["myscript.user.js"],
                 "matches": ["http://domain.com/"]
             
         ]
     
    

    现在您已经有了包含用户脚本和 manifest.json 的目录,您可以将其作为解压扩展程序导入(打包的扩展程序将在 Chrome 重新启动后被禁用)。为此,只需检查“开发者模式”并选择“加载解压扩展...”。导航到在步骤 2 中创建的目录并选择它:即“全部”。

优点

原生解决方案 如果您在 Chrome 上开发脚本,这对您来说很自然(显然这不是我的情况:P) 您的脚本现在被视为“真正的”扩展程序。

缺点

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

结论

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

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

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

编辑:清单已修复

【讨论】:

太棒了!我对这种变化感到非常恼火。这对我来说似乎是最好的解决办法。我不想使用不稳定的浏览器进行所有浏览,只是为了将一些文本转换为超链接!【参考方案3】:

solution number 1 from @user2428118 answer的延续。

为确保您始终使用--enable-easy-off-store-extension-install 标记您启动 Chrome,可以使用(除了编辑菜单开始等中的所有快捷方式)此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 的实际路径。

【讨论】:

谢谢,解决了其他软件打开Chrome的问题。我不会尝试它,因为它太侵入性,但值得一提。 =) 我打算给你点赞,别担心,但现在我没有这样做,因为我仍然不确定如何保持主题的可读性。这应该遵循 user2428118 的回答,但它不是一个完整的***解决方案,所以我不想犯错误。我认为最好的方法是编辑另一个答案以添加您的答案和原始评论的链接,但我不想在不问您的情况下这样做(这就是为什么“谢谢”:引起您的注意和帮助我有点:/)。 @Demurgos “我认为最好的办法是编辑另一个答案以添加您的答案和原始评论的链接” - 我做了类似这样的多次过去几次,我的编辑总是被拒绝。所以我开始总是发布我自己的答案。 好的,显然它已在另一条消息中进行了编辑。我给你一个赞成票;)【参考方案4】:

不幸的是,除了 Tampermonkey 之类的扩展之外,似乎没有好的解决方法,因为您的脚本为每个用户生成的方式不同。

这是我找到的最好的解释:

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

【讨论】:

这不是解释。那是宣传。

以上是关于使用 Chrome 35 及更高版本启用非 PlayStore 用户脚本的主要内容,如果未能解决你的问题,请参考以下文章

本地通知 ios 6.0 及更高版本

请为 Windows Mobile 5.0 及更高版本安装“NETCFv35.Messages.EN.wm.cab”或为其他平台安装“NETCFv35.Messages.EN.cab”。重启a

使用 jquery 1.6 及更高版本会使 Django 的 FilteredSelectMutliple 无法使用

在 Java 11 及更高版本中使用 HttpClient 时如何跟踪 HTTP 303 状态代码?

如何在 Qt4 及更高版本中对 QTableView 进行排序

Android 5.0.2 及更高版本不允许通过蓝牙 LE 进行 HID 访问