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

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

§
Posted: 10-12-2019

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

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

Post reply

Sign in to post a reply.