作者danny0838 (道可道非常道)
看板Browsers
标题Re: [问题] 开启多个javascript连结
时间Wed Nov 3 20:54:30 2021
※ 引述《alalal (何小明)》之铭言:
: 大家好,请教大家在 Firefox 或 Edge 上
: 是否可以同时开启多个Javascript超连结?
: 如下
: javascript:openWin('ShowCompProfile.ASP?RecNo=22332%27)
: 试过几个 Firefox 的扩充套件
: 如 Open Multiple URLs
: Open links in Tabs
: Snap Links Plus
: Open Selected Links等等
: 一般html的超连结可以,但javascript的超连结就不行
: 想请问大家有解决的方法吗?
: 谢谢
javascript: 连结的功能就是在目前页面执行一段 JavaScript 程式码,
在新分页开启是不会有作用的。
如果 javascript: 连结本身的程式码的功能就是「开启新分页并载入XXX」,
有个做法是模拟把框选范围中每个超连结都点一下。
只是对一般超连结而言,页面只能切换一次,
全部都点只会切换到其中一个分页,
所以一般来说不太会有人做这个功能。
这功能想做的话并不困难,把以下网址加到书签小工具(断行请替换为半形空白),
框选想要「全部都点一下」的超连结们,再点击这个书签小工具就可以了:
javascript:(function(){ const ranges = []; const sel =
window.getSelection(); for (let i = 0, I = sel.rangeCount; i < I;
i++) { ranges.push(sel.getRangeAt(i)); } const nodeRange =
document.createRange(); const elems =
document.querySelectorAll('a[href], area[href]'); for (const elem of
elems) { if (!elem.isConnected) { continue; }
nodeRange.selectNode(elem); if (!ranges.some(range =>
range.compareBoundaryPoints(Range.END_TO_START, nodeRange) <= 0 &&
range.compareBoundaryPoints(Range.START_TO_END, nodeRange) >= 0)) {
continue; } elem.click(); } })();
--
《终结内容农场》浏览器套件
Chrome:
http://bit.ly/CFTGC
Firefox:
http://bit.ly/CFTFx (桌机 & Android 手机)
真相1:
http://bit.ly/CFTss1
真相2:
http://bit.ly/CFTss2
详细介绍:
http://bit.ly/CFTinfo
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.227.225.87 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Browsers/M.1635944075.A.860.html
※ 编辑: danny0838 (1.164.24.134 台湾), 11/05/2021 22:46:20
1F:推 t7yang: 我的第一个想法也是用书签工具就可以做到了,但是我想到的 11/06 00:22
2F:→ t7yang: 比较简单,其实你就 querySelectorAll 一次过把所有元素 11/06 00:22
3F:→ t7yang: 都选出来然後 forEach 跑一次 elm.click() 就好了 11/06 00:22
4F:→ t7yang: 因为这段程式码本来就是在原分页的环境中执行的,就算跳到 11/06 00:23
5F:→ t7yang: 其他页面了,也根本不影响原分页 JS 的执行。 11/06 00:23
6F:→ t7yang: 我自己测试的结果也可以的 11/06 00:24
7F:→ t7yang: goonlinetools.com/snapshot/code/#3ie8iwzxq49k26xf1c8rd 11/06 00:41
网页中通常不会只有 javascript 连结,也会有其他普通的超连结,
如果完全不筛选无差别点击所有超连结,
可能在按到普通超连结就离开目前分页了,
离开目前分页可能会有一点延迟(视浏览器实做及硬体设备而定),
但无法保证所有 javascript 连结都会在那之前被开启。
况且就算可以,使用者也不一定想开启所有连结,
所以还是支援只操作选取范围的超连结会比较有可控性一点。
※ 编辑: danny0838 (1.164.24.134 台湾), 11/06/2021 11:36:07
8F:→ t7yang: 要怎麽 query 当然使用者自己决定,我只是强调 JS 那段 11/06 20:02
9F:→ t7yang: 不会有影响 11/06 20:02
「JS 那段不会有影响」指的是前面写的
「就算跳到其他页面了,也根本不影响原分页 JS 的执行」?
这不对啊,如果页面在执行完 JS 以前就跳到其他页面,
原来的 JS 就会有一些没执行到,怎麽能说是没影响?
以下是测试页:
https://jsfiddle.net/t075vwgj/1/
试试在不同浏览器执行,点击 "Click all links" 按钮,
如果你说得对,应该在任何浏览器都会看到跳出 5 个视窗。
而我测试结果是不会。
※ 编辑: danny0838 (1.164.24.134 台湾), 11/07/2021 11:53:22
10F:→ t7yang: 如果不是 target blank 就没办法罗,原本页面的已经不在XD 11/07 14:58
你这样又回到原点罗...
原来的考量就是因为一般网页中没有开启在原分页的一般超连结的机率太小,
一次点全部连结无法正常运作的风险太高,所以才不这麽做的啊XD
※ 编辑: danny0838 (59.115.13.230 台湾), 11/08/2021 22:37:50
11F:→ t7yang: 阿灾,如果他的情况是连结都开在新分页就快速写一下就解决 11/09 16:05
12F:→ t7yang: 了,解决个案就好,不用写通解 哈 11/09 16:06