XIU2 / UserScript

🐵 自用的一些乱七八糟 油猴脚本~
https://greasyfork.org/users/457025
GNU General Public License v3.0
7.75k stars 612 forks source link

关于在 Safari 浏览器上部分网站无法运行油猴脚本的问题说明 #107

Open XIU2 opened 2 years ago

XIU2 commented 2 years ago

一直以来都有人反馈我的某个油猴脚本在 Safari 浏览器下无法访问,但是我多次远程协助也没找到原因(我没有 MAC 设备),直到刚才在热心人士的帮助下,经过测试研究,最后发现:

之所以 Safari 浏览器在部分网站下无法运行油猴脚本,均是因为这些网站配置了 Content-Security-Policy(内容安全策略)。 在其他浏览器上,CSP 不会影响油猴脚本,因为浏览器扩展在插入油猴脚本时,会忽略网站的 CSP 策略。 但是 Safari 浏览器很奇葩的不与其他浏览器为伍,在浏览器扩展插入油猴脚本时会遵守网站的 CSP 策略,导致油猴脚本被阻止(显然这些网站不会将油猴脚本的路径加入 CSP 策略中)。

查询搜索后发现,似乎目前没有任何方法可以在 Safari 浏览器上绕过/禁用 CSP 策略,因此凡是启用 CSP 策略的网站均无法在 Safari 浏览器上依靠扩展运行油猴脚本。 当然如果你有解决方法的话,欢迎在下面告诉我~

the-eric-kwok commented 2 years ago

我写脚本也遇到了这个问题,顺手补充一下 TamperMonkey 开发者的说明😵: https://github.com/Tampermonkey/tampermonkey/issues/296#issuecomment-222356524

LoneFireBlossom commented 2 years ago

首先感谢作者制作的脚本。

对部分脚本而言,有效的解决方法是,将插件安装在AdGuard中,可以看我下面的这个帖子,里面提到了一些安装在AdGuard里就有效的脚本:

https://github.com/the1812/Bilibili-Evolved/discussions/2362

我说的AdGuard是这个AdGuard for Mac,也就是客户端的版本,而非Safari插件的版本。这个是需要付费购买的,大概。几年前买的,好像是98元永久三设备使用,记不清了,反正国区很多商家有代理。(但是我在Mac1 + iPhone 1 + iPad *2上都可以用,这4台设备了) Catalina 10.15.7, Safari 14、15版本、AdGuard for Mac最新版确认有效 https://adguard.com/en/adguard-mac/overview.html

安装示例:

image

知乎页面显示效果:

image

这个方法有两个问题:

  1. 如上面的链接所说,我每个脚本都不知道到底安装在油猴更合适还是AdGuard更合适——或许一直都是AdGuard更合适?但是我不懂技术不清楚。但是也有一些安装在AdGuard里对Safari也无效的脚本,在上面的链接中也有提到。(另外,装在AdGuard for Mac中的话,插件也会同时作用于其它所有主流浏览器)
  2. 最大问题是,安装在AdGuard里的脚本,不像油猴一样可以点击油猴图标,在弹出的菜单中进行设置,比如

    默认开启,如果想要关闭,请点击浏览器右上角的 Tampermonkey 扩展图标 [✅] 快捷回到顶部。

这种设置项在AdGuard里根本就看不到。所以最合适的是没有设置项的脚本,以及能在当前页面上有一个「设置⚙️」按钮,点一下能弹出设置菜单的脚本,或者是能通过某些快捷键,或者在调出功能菜单之后能显示设置按钮的脚本,比如:

image
wangliangliang2 commented 2 years ago

这个csp问题可以用VPN拦截流量修改响应头来处理,另,别那么着急关闭#115issue啊

LoneFireBlossom commented 2 years ago

😂 我其实是希望作者改一下(各个)脚本,把按钮放在页面上,不过感觉这工作量大概挺大的……就不敢说 或者能不能出个教程说一下,怎么通过修改代码来修改各个设置项。


另外关于自动翻页无效的问题贴在之前的链接了,就是下面这一楼,其实是希望作者看到能回复一下是不是各个插件的实现方式不一样,我想如果能参照endless google的实现方式是不是就有效了

https://github.com/the1812/Bilibili-Evolved/discussions/2362#discussioncomment-1561786

XIU2 commented 2 years ago

@LoneFireBlossom 这没办法写教程。。。 而且设计一套新的脚本功能菜单确实挺麻烦,挺费时间的。

LoneFireBlossom commented 2 years ago

@LoneFireBlossom 这没办法写教程。。。 而且设计一套新的脚本功能菜单确实挺麻烦,挺费时间的。

用3楼 https://github.com/XIU2/UserScript/issues/107#issuecomment-955114887 的方法大部分装在AdGuard里的脚本也足够我使用了,所以也还好。知乎增强的默认设置对我来说也够用了。 AdGuard确实挺不错的,足以作为油猴的替补方案。就是我搜了一下网上无论中英文,似乎根本就没有一个总结一个脚本到底是装在油猴里合适还是AdGuard里合适的帖子,整得我以后每装一个插件都得想一次

LoneFireBlossom commented 2 years ago

好像AdGuard里安装的脚本会默认更新,就算我编辑了脚本它也会更新……(我怎么记得tempormonkey不是这样的。不过Safari的tempormonkey我是搞不懂它的更新策略,几个月都不见有更新。这里说的是chrome的) 所以如果编辑插件的话还是得顺带编辑一下@downloadURL,改成无法下载的那种应该就可以了。如果没有这一项就添加。

shangguanhongxin commented 2 years ago

安装macaque后安装脚本可以在ios的safari运行了

the-eric-kwok commented 2 years ago

使用 UserScripts 软件可以运行,iOS 和 macOS 的 Safari 均可。 目前 UserScripts 软件对 GM api 的支持还不完整,诸如 GM_registerMenuCommand 的 api 还无法使用。先不要更改帮助文档。 项目地址:https://github.com/quoid/userscripts 参见:https://github.com/Tampermonkey/tampermonkey/issues/296#issuecomment-732395145

touchmii commented 2 years ago

首先感谢作者制作的脚本。

对部分脚本而言,有效的解决方法是,将插件安装在AdGuard中,可以看我下面的这个帖子,里面提到了一些安装在AdGuard里就有效的脚本:

the1812/Bilibili-Evolved#2362

我说的AdGuard是这个AdGuard for Mac,也就是客户端的版本,而非Safari插件的版本。这个是需要付费购买的,大概。几年前买的,好像是98元永久三设备使用,记不清了,反正国区很多商家有代理。(但是我在Mac1 + iPhone 1 + iPad *2上都可以用,这4台设备了) Catalina 10.15.7, Safari 14、15版本、AdGuard for Mac最新版确认有效 https://adguard.com/en/adguard-mac/overview.html

安装示例: image

知乎页面显示效果: image

这个方法有两个问题:

  1. 如上面的链接所说,我每个脚本都不知道到底安装在油猴更合适还是AdGuard更合适——或许一直都是AdGuard更合适?但是我不懂技术不清楚。但是也有一些安装在AdGuard里对Safari也无效的脚本,在上面的链接中也有提到。(另外,装在AdGuard for Mac中的话,插件也会同时作用于其它所有主流浏览器)
  2. 最大问题是,安装在AdGuard里的脚本,不像油猴一样可以点击油猴图标,在弹出的菜单中进行设置,比如

默认开启,如果想要关闭,请点击浏览器右上角的 Tampermonkey 扩展图标 [✅] 快捷回到顶部。

这种设置项在AdGuard里根本就看不到。所以最合适的是没有设置项的脚本,以及能在当前页面上有一个「设置⚙️」按钮,点一下能弹出设置菜单的脚本,或者是能通过某些快捷键,或者在调出功能菜单之后能显示设置按钮的脚本,比如: image

这个方式挺好的,在Mojave这个系统下面也就这个办法了,新版系统好像有个叫user script的插件,不知道能否支持。

shen-muchuan commented 2 years ago

我使用 “知乎增强”脚本测试了,Macaque 在 macOS 和 iOS 下都可以正常运行脚本,Userscripts 不行。 这个问题困扰了我那么久,终于完美解决了。

LoneFireBlossom commented 2 years ago

我使用 “知乎增强”脚本测试了,Macaque 在 macOS 和 iOS 下都可以正常运行脚本,Userscripts 不行。 这个问题困扰了我那么久,终于完美解决了。

感谢,可惜试了试并不是支持所有脚本。例如「知乎重排for印象笔记」就不行。 https://greasyfork.org/scripts/372064-知乎重排for印象笔记/code/知乎重排for印象笔记.user.js

jackwude commented 2 years ago

之前我也是用的 adguard 来驱动 Safari 下使用大佬的脚本,但是有些生效,有些不生效,很苦恼。 现在有一个新的 Safari 扩展,stay 2 ,推荐各位去下载。XIU 大佬的大部分脚本,都是可以直接Safari 下生效的~~

Mqpzi commented 2 years ago

之前我也是用的 adguard 来驱动 Safari 下使用大佬的脚本,但是有些生效,有些不生效,很苦恼。 现在有一个新的 Safari 扩展,stay 2 ,推荐各位去下载。XIU 大佬的大部分脚本,都是可以直接Safari 下生效的~~

请教下你是怎么设置的,我用 stay 2 知乎增强没生效……

destroy314 commented 1 year ago

我写脚本也遇到了这个问题,顺手补充一下 TamperMonkey 开发者的说明😵: Tampermonkey/tampermonkey#296 (comment)

这个issue里有人说免费的Userscripts扩展能使用eval来绕开CSP,不过和装在AdGuard里一样不能设置

snowman commented 1 year ago

https://github.com/PhilGrayson/chrome-csp-disable

安装此插件解决 Chrome 浏览器 GitHub 无法翻页 (fix by disabling CSP)


但是上面那个插件需要你每次在当前 tab 点击插件启动然后刷新一下网页.

可以使用这个插件默认禁止 CSP 策略 https://chrome.google.com/webstore/detail/always-disable-content-se/ffelghdomoehpceihalcnbmnodohkibj

LoneFireBlossom commented 1 year ago

现在Safari的油猴已经支持知乎美化、知乎增强等脚本的基本工作了(我只把脚本打开,刷新页面简单看了一下)。 Safari Version 17.0 (18616.1.27.111.19, 18616) 【beta版,谷歌搜索直接到官网上下载即可。我不知道v16如何】 再比如网页限制解除(改)、github enhancement - high speed download、popup search也可以在以前不行的知乎、GitHub上使用。 目前发现的问题是这些按钮都没反应。

image

但是userscript+还不行,甚至以前在adguard里可以现在adguard都不行了。