找回密码
 快速注册
搜索
楼主: kuing

记录一回写油猴

[复制链接]

730

主题

1万

回帖

9万

积分

积分
93623
QQ

显示全部楼层

 楼主| kuing 发表于 2022-7-28 21:42
知乎的公式显示貌似又变了……

现在好像是 mathjax2.7 的 svg 输出……

字体比之前大一些……

我的脚本又得改写了😒……

17

主题

127

回帖

1822

积分

积分
1822

显示全部楼层

uk702 发表于 2022-7-29 08:25
kuing 发表于 2022-7-28 21:42
知乎的公式显示貌似又变了……

现在好像是 mathjax2.7 的 svg 输出……

老大之前 V2 版本的网页源码中,好像屏蔽了公式的源代码,不过幸好还可以从 MathML 代码反过来生成公式的源代码。

而今升级成 V3 了, MathML 代码好像也没了,暂时没辙中~~~

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

hbghlyj 发表于 2022-7-29 09:51
uk702 发表于 2022-7-29 01:25
老大之前 V2 版本的网页源码中,好像屏蔽了公式的源代码,不过幸好还可以从 MathML 代码反过来生成公式的 ...


DevTools → Network → Block URL "mathjax" → Reload

processed-3eb43a02-bd67-4510-b582-cfc1f87aa97f_8txOuleX.jpg

In this way we can prevent loading mathjax.

processed-3eb43a02-bd67-4510-b582-cfc1f87aa97f_8txOuleX.jpg

点评

您老的招太高了!多谢多谢。  发表于 2022-7-29 15:58

730

主题

1万

回帖

9万

积分

积分
93623
QQ

显示全部楼层

 楼主| kuing 发表于 2022-7-29 13:29
uk702 发表于 2022-7-29 08:25
老大之前 V2 版本的网页源码中,好像屏蔽了公式的源代码,不过幸好还可以从 MathML 代码反过来生成公式的 ...


?我不懂 MathML,不太明白你的意思……
这和本帖的主题(油猴脚本)有关吗?

点评

Sorry! 没有直接关系。只是说,mathjax v2 生成的网页,可以(不通过油猴而是)用软件反代码生成原始代码。  发表于 2022-7-29 15:57

730

主题

1万

回帖

9万

积分

积分
93623
QQ

显示全部楼层

 楼主| kuing 发表于 2022-7-29 16:04
kuing 发表于 2022-7-28 21:42
知乎的公式显示貌似又变了……

现在好像是 mathjax2.7 的 svg 输出……


现在重写知乎复制公式油猴:
  1. // ==UserScript==
  2. // @name         zihu_ltx_cpy
  3. // @version      2022-7-29
  4. // @description  for zihu ltx cpy
  5. // @match        https://www.zhihu.com/*
  6. // @run-at context-menu
  7. // ==/UserScript==
  8. (function() {
  9.     'use strict';
  10. let zmaths = document.querySelectorAll('.ztext-math');
  11. for (let item of zmaths) {
  12.     var tex = '$'+item.dataset.tex+'$';
  13.     tex = tex.replace(/\$\\begin\{align\*\} /g,'\\begin{align*}\n')
  14.         .replace(/ \\end\{align\*\}\$/g,'\n\\end{align*}')
  15.         .replace(/\\\\ /g,'\\\\\n')
  16.     ;
  17.     var g = document.createElement('img');
  18.     g.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs=';
  19.     g.alt = tex;
  20.     item.appendChild(g);
  21. }
  22. })();
复制代码

使用方法:
在知乎加载完公式后,
在页面任意地方右键,选择油猴菜单,点“zihu_ltx_cpy”,
然后就可以拖选内容复制,粘贴出来就有代码了。

这次顺便改进了多行公式:
去掉 $\begin{align*}\end{align*}$ 的 \$ ;
以前多行公式复制粘贴出来代码全是在同一行内,不便于阅读,现在会在 \\\\ 之后换行。

这次由于知乎不再以图片显示公式,而是在 span 里面用 svg,没办法加 alt 属性,只好自己添加一个 1x1 小图片(就是那串 base64 码),里面加 alt=代码。
所以如果仔细看,就会发现当你点“zihu_ltx_cpy”之后公式的后面会多出一个小黑点,复制的代码其实是复制这个图片。

点评

更新更新了~  发表于 2022-8-2 23:53
丢失了展示模式,知乎特有的\\居被保留  发表于 2024-3-12 10:32

830

主题

4862

回帖

3万

积分

积分
36159

显示全部楼层

isee 发表于 2022-8-9 19:45
kuing 发表于 2022-7-29 16:04
现在重写知乎复制公式油猴:

使用方法:

不错不错真不错!
isee=freeMaths@知乎

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

hbghlyj 发表于 2022-8-9 20:28
stackoverflow.com/questions/3755606

(function(){...})()
可以简写成
!function(){...}()

730

主题

1万

回帖

9万

积分

积分
93623
QQ

显示全部楼层

 楼主| kuing 发表于 2022-8-9 20:52
isee 发表于 2022-8-9 19:45
不错不错真不错!


我发现复制别的人帖子似乎有问题……

如果复制别人一小段内容,那就没问题;
但如果复制一大段,就会变成复制了带有版权信息的内容,而且那些公式代码的前面还会多出一串似乎是 MathML 的东西,而且换行也没了……

点评

禁用JS就👌  发表于 2022-8-10 02:19

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

hbghlyj 发表于 2022-8-9 21:48

清除草稿本



  1. // ==UserScript==
  2. // @name         clear input Text
  3. // @namespace    http://tampermonkey.net/
  4. // @match        https://kuing.cjhb.site/forum.php*
  5. // ==/UserScript==
  6. window.addEventListener('load',()=>{
  7.     if(typeof clearinputText == 'undefined') return;
  8.     clearinputText();
  9. });
复制代码

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

hbghlyj 发表于 2022-8-9 21:51

去除attachment tooltip(附件提示框)、禁用浮动窗口回复

大家可以根据自己的喜好选用
  1. // ==UserScript==
  2. // @name         delete attachimg tip & disallowfloat reply
  3. // @namespace    http://tampermonkey.net/
  4. // @match        https://kuing.cjhb.site/forum.php?mod=viewthread*
  5. // ==/UserScript==
  6. document.querySelectorAll('div.aimg_tip').forEach(a=>a.remove());
  7. disallowfloat+='|reply';
复制代码

730

主题

1万

回帖

9万

积分

积分
93623
QQ

显示全部楼层

 楼主| kuing 发表于 2022-8-10 03:57
kuing 发表于 2022-8-9 20:52
我发现复制别的人帖子似乎有问题……

如果复制别人一小段内容,那就没问题;
但如果复制一大段,就会 ...


突然想起我之前在 chrome 安装了一个“Simple Allow Copy”插件专门用来解除各种复制限制的。

于是先在知乎上点亮该插件(以后好像就不用再点),再用油猴,复制他人的也没问题了。

=====
哦还是有复制到多余 MathML 的问题……

好吧,再修改油猴,不搞什么小黑点图片了,直接让公式变成代码显示出来!:
(2022-8-10 20:01 更新)
  1. // ==UserScript==
  2. // @name         zihu_ltx_cpy
  3. // @version      2022-8-10
  4. // @description  for zihu ltx cpy
  5. // @match        https://*.zhihu.com/*
  6. // @run-at context-menu
  7. // ==/UserScript==
  8. (function() {
  9.     'use strict';
  10. let zmaths = document.querySelectorAll('.ztext-math');
  11. for (let item of zmaths) {
  12.     var tex = item.dataset.tex;
  13.     if (!(tex.search(/align\*|gather\*|equation\*|eqnarray|\\\]/) == -1)) {
  14.         tex = tex.replace(/\\\\ *$/g,'')
  15.             .replace(/(\\begin\{(align\*|gather\*|equation\*|eqnarray)\})/g,'$1\n')
  16.             .replace(/(\\end\{(align\*|gather\*|equation\*|eqnarray)\})/g,'\n$1')
  17.         ;
  18.     } else if (!(tex.search(/\\\\/) == -1)) {
  19.         tex = tex.replace(/\\\\ *$/g,'');
  20.         tex = '\\['+tex+'\\]';
  21.     } else {
  22.         tex = '$'+tex+'$';
  23.     }
  24.     tex = tex.replace(/\\\\(\[.*?\])?/g,'\\\\$1\n');
  25.     item.innerText = tex;
  26. }
  27. })();
复制代码

用法一样。

顺便又作一点小改进:
考虑到知乎上很多人喜欢在公式末尾加 \\\\ 以变成行间公式,但在知乎外是不应该有的,所以去掉;
兼容 \\\\[...] 这种换行;
(之前一直复制自己的,所以不曾考虑以上两点(我从来不这样写……))
当发现公式内有 \\\\ 时判断为行间公式,此时两边加的是 \\[ 和 \\](会误伤某些原先在行内的多行公式比如分段函数);

点评

想知道它的原理是什么😶‍🌫️  发表于 2022-8-10 04:15
研究一下“Simple Allow Copy”插件?  发表于 2022-8-10 14:18
回复下一点评:你可以在网上找到它的.crx文件,下载下来改后缀为.rar然后解压就能看到代码(我自然是看不懂的)  发表于 2022-8-10 16:55

评分

参与人数 1威望 +2 收起 理由
isee + 2 很有用!

查看全部评分

17

主题

127

回帖

1822

积分

积分
1822

显示全部楼层

uk702 发表于 2022-8-10 09:47
kuing 发表于 2022-8-10 03:57
突然想起我之前在 chrome 安装了一个“Simple Allow Copy”插件专门用来解除各种复制限制的。

于是先在 ...


老大,我懒得搞油猴了,进入开发者工具,直接将老大的代码拷贝到 console 中运行,就出来公式代码了。

Snipaste_2022-08-10_09-45-48.png

点评

原来对应的英文是 inspect element  发表于 2022-8-29 22:24

730

主题

1万

回帖

9万

积分

积分
93623
QQ

显示全部楼层

 楼主| kuing 发表于 2022-8-10 14:08
uk702 发表于 2022-8-10 09:47
老大,我懒得搞油猴了,进入开发者工具,直接将老大的代码拷贝到 console 中运行,就出来公式代 ...


搞个油猴很容易的啊

PS、竟然还有人用 eqnarray 环境……
看来我还得改改我那代码……(已修改--16:25 注)

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

hbghlyj 发表于 2022-8-10 14:23
kuing 发表于 2022-8-10 07:08
搞个油猴很容易的啊

PS、竟然还有人用 eqnarray 环境……

建议发布到Greasy Fork, 更新脚本时, 用户只要点击一下就更新了

730

主题

1万

回帖

9万

积分

积分
93623
QQ

显示全部楼层

 楼主| kuing 发表于 2022-8-10 14:25
hbghlyj 发表于 2022-8-10 14:23
建议发布到Greasy Fork, 更新脚本时, 用户只要点击一下就更新了


我这渣渣水平写的代码哪好意思拿出来发布啊

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

hbghlyj 发表于 2022-8-10 14:28
kuing 发表于 2022-8-10 07:25
我这渣渣水平写的代码哪好意思拿出来发布啊

发布总是有用的. 比如我是一个用户.

830

主题

4862

回帖

3万

积分

积分
36159

显示全部楼层

isee 发表于 2022-8-29 20:28
更新到8-10
isee=freeMaths@知乎

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

hbghlyj 发表于 2022-12-23 04:57
uk702 发表于 2022-7-29 01:25
老大之前 V2 版本的网页源码中,好像屏蔽了公式的源代码,不过幸好还可以从 MathML 代码反过来生成公式的


而今升级成 V3 了, MathML 代码好像也没了,暂时没辙中~~~

澄清一下,不是因为升级成V3,而是因为避免产生横向滚动条,kuing在今年2月设置了MathJax不生成mjx-assistive-mml,从而在被MathJax处理后的网页源代码里不包含TeX源码了
但是在Debugger→Main Thread→forum.php可以查看未被MathJax处理的网页源代码,它仍然包含TeX源码
如下图
1.png

17

主题

127

回帖

1822

积分

积分
1822

显示全部楼层

uk702 发表于 2022-12-23 07:56
hbghlyj 发表于 2022-12-23 04:57
澄清一下,不是因为升级成V3,而是因为避免产生横向滚动条,kuing在今年2月设置了MathJax不生成mjx-assist ...

谢谢。我也发现这一招,这招等价于直接用 curl 命令下载某个网页,总的来说很有效。但也有局限性,某些网页(知乎?)首次打开时只显示个空架子,后面不断用 js 动态加载,就不好使了。

总的来看还是 block mathjax 相关的 http 请求最有效。

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

hbghlyj 发表于 2022-12-23 07:58
uk702 发表于 2022-12-23 00:56
某些网页(知乎?)首次打开时只显示个空架子,后面不断用 js 动态加载 ...


相关帖子:  单页应用(SPA) 和 同构页面
通过动态重写当前页面来与用户交互,而非传统的从服务器重新加载整个新页面。

后面举了例子
Facebook 就是这样工作的。后端代码推出处理用户交互的 JavaScript 代码。
[...]
查看 Facebook 代码,您会发现几乎整个页面都是 JavaScript。

手机版|悠闲数学娱乐论坛(第3版)

GMT+8, 2025-3-4 16:00

Powered by Discuz!

× 快速回复 返回顶部 返回列表