Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
XIU2 opened this issue Oct 19, 2021 · 19 comments
Labels
需要帮助 需要更多信息才能实现功能/解决问题

Comments

@XIU2
Copy link
Owner

XIU2 commented Oct 19, 2021

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

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

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

@XIU2 XIU2 added the 需要帮助 需要更多信息才能实现功能/解决问题 label Oct 19, 2021
@the-eric-kwok
Copy link

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

@LoneFireBlossom
Copy link

LoneFireBlossom commented Oct 30, 2021

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

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

the1812/Bilibili-Evolved#2362

我说的AdGuard是这个AdGuard for Mac,也就是客户端的版本,而非Safari插件的版本。这个是需要付费购买的,大概。几年前买的,好像是98元永久三设备使用,记不清了,反正国区很多商家有代理。(但是我在Mac*1 + 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
Copy link

wangliangliang2 commented Nov 3, 2021

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

@XIU2 XIU2 pinned this issue Nov 3, 2021
@LoneFireBlossom
Copy link

LoneFireBlossom commented Nov 3, 2021

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


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

the1812/Bilibili-Evolved#2362 (comment)

@XIU2
Copy link
Owner Author

XIU2 commented Nov 3, 2021

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

@LoneFireBlossom
Copy link

LoneFireBlossom commented Nov 3, 2021

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

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

@LoneFireBlossom
Copy link

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

@shangguanhongxin
Copy link

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

@the-eric-kwok
Copy link

the-eric-kwok commented Jan 27, 2022

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

@touchmii
Copy link

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

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

the1812/Bilibili-Evolved#2362

我说的AdGuard是这个AdGuard for Mac,也就是客户端的版本,而非Safari插件的版本。这个是需要付费购买的,大概。几年前买的,好像是98元永久三设备使用,记不清了,反正国区很多商家有代理。(但是我在Mac*1 + 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
Copy link

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

@LoneFireBlossom
Copy link

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

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

@jackwude
Copy link

jackwude commented Aug 1, 2022

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

@Mqpzi
Copy link

Mqpzi commented Sep 2, 2022

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

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

@destroy314
Copy link

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

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

@snowman
Copy link

snowman commented Dec 20, 2022

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
Copy link

LoneFireBlossom commented Sep 12, 2023

现在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都不行了。

@Wei-Winter
Copy link

使用Safari浏览器的小伙伴可以试试用代理工具Quantumult X 来去除网站的csp策略,比如github可以用这样的规则^https?://github\.com($|/.*) url response-header (\r\n)Content-Security-Policy:.+(\r\n) response-header $1Content-Security-Policy:$2
但是我不知道同样的写法对知乎没有用,有大佬知道为啥吗^https?://www\.zhihu\.com($|/.*) url response-header (\r\n)Content-Security-Policy:.+(\r\n) response-header $1Content-Security-Policy:$2

@PandaFiredoge
Copy link

用Stay,修改注入方式为Contect可以部分解决

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
需要帮助 需要更多信息才能实现功能/解决问题
Projects
None yet
Development

No branches or pull requests