返回首頁 

Discussions»Development

如何去掉某歌镜像搜索结果中的网址前缀?

Posted: 01.11.2019
Edited: 01.11.2019

如何去掉某歌镜像搜索结果中的网址前缀?

本人纯 javascript 小白,不过平常有问题都会先搜索、也愿意折腾,是Greasy Fork 的多年用户,感谢开发者们的无私奉#!这是第一次提问,需求很简单,所以没从头啃 JS 基础,求高人指点一二。

场景:平常会用到各种某歌搜索镜像,但有些镜像的搜索结果会全部走代理(页面内的所有链接前会添加上该镜像的域名地址)目标:我想实现点击结果链接时不走代理,即打开搜索结果的真实地址环境:Chrome v78.0.3904.70 + Tampermonkey v4.8.41例子:这是一个某歌镜像

如果搜索内容 xxx,点击其中一个结果,打开的新标签页地址:https://js.dlolb.ml/-----https://www.ixxx.com/。而我实际想要打开的是:https://www.ixxx.com/

尝试1(纯javascript):

var prefix = 'https://js.dlolb.ml/-----';var links = document.querySelectorAll ("div.r>a");for (var i = 0, l = links.length; i < l; i++) {var link = links[i];link.href = link.href.replace(prefix, '');}

尝试2(jQuery):

// @require             https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js// @grant               GM_addStyle$(document).ready(function() {var SearchRezLinks  = $("div.srg div.r > a:not(.fl)");SearchRezLinks.each ( function () {var jThis      = $(this);var cLinks     = jThis.prop('href').replace('https://js.dlolb.ml/-----', '');jThis.parent ().append ('<a href="' + cLinks + '" target="_blank">直达</a>');});});GM_addStyle ( "                                 \div.srg div.r > a + a {                    \font-size:         16px;                \margin-left:    0.8em;                \}                                                    \" );

尝试1尝试2我都是参照网上的脚本进行的修改。在 Chrome 的 Console 中尝试1只会返回最后一个搜索结果(即第10个)的真实链接;尝试2如果把搜索结果整个页面的 html 放到 https://jsfiddle.net/ 中,则可以成功替换。

问题:如果导入 Tampermonkey,以上尝试均不起任何作用,即没有替换任何内容(似乎无法在镜像的域名前缀生成后再进行替换),我不太懂里面的内在机制,所以肯请大佬指点一下,或者提示一下用什么英文关键词进行检索? 谢谢:-)

Posted: 01.11.2019

补充:在 Github 上查到站点建站的源码出处:jsproxy

Posted: 11.11.2019

进去看了一下,之所以你写的脚本没有成功有以下几个原因

  1. 该网站会拦截a标签的点击事件,你仅仅改它的href 没有用。
  2. 该网站重写了 window.open 方法,不管你跳什么地址都会给你加上它的地址,可以用 GM_openInTab 代替。

解决思路:既然它拦截 a 标签的跳转,索性我们就直接把 a 标签直接改为其他标签,自己搞一个点击动作跳转。由于 window.open 被重写,我们就用 tampermonkey 提供给我们的GM_openInTab 这个方法调整即可。

// ==UserScript==// @name         New Userscript// @namespace    http://tampermonkey.net/// @version      0.1// @description  try to take over the world!// @author       You// @require      https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js// @match        *://js.dlolb.ml/*// @grant        GM_addStyle// @grant        GM_openInTab// ==/UserScript==GM_addStyle(`.span-a:hover, .span-a:hover h3 {text-decoration: underline;}.span-a {cursor: pointer;color: #1a0dab;}`);(function($) {'use strict';// 需要替换的a标签选择器const aSelector = '#search a';// 替换标签$(document).on('mouseenter', aSelector, function(e) {if($(this).attr('href').indexOf('https://www.google.com') === 0) {return;}$(this).replaceWith(function() {return $('<span />', {class: ($(this).attr('class') || '') + ' span-a',html: this.innerHTML,href: $(this).attr('href').replace('https://js.dlolb.ml/-----', ''),});});});// 替换后标签点击新窗口打开$(document).on('click', '.span-a', function(e) {GM_openInTab($(this).attr('href'), {active: true,insert: true,setParent: true,});});})(window.jQuery);
Posted: 12.11.2019

非常感谢@ekoooo!脚本有效,简明好懂,(゜- ゜)つロ

Posted: 12.11.2019

根据 ekoooo 的 上述提示 (实际应该说是指导),自己可以很轻易的在原链接旁加上一个“直达”链接,很方便!再次超级感谢! @ekoooo

Posted: 12.11.2019
Edited: 12.11.2019

因网络原因,重复评论,竟然无法删除 ......

脚本1看着没有任何问题。一般脚本不起作用就是执行时机不对。我们查看页面结构的时候 要看浏览器的开发者工具里的源码不能看右键查看源文件 打开后的源码

解决方案:把你要执行的脚本放在一个定时器里,延迟几秒执行 ,一般都能解决问题。

Post reply

Sign in to post a reply.