如何实现跳转至动态更新href的书签工具?Bookmarklet方案失效求助
问题解决:一键跳转至动态更新的课程链接
问题背景
我需要一个书签,能直接跳转到目标页面(https://rasp.tpu.ru/site/department.html?id=7950&cource=1)里某个每周更新href的按钮链接,按钮的href包含gruppa_42148。之前尝试的书签脚本因为跳转后脚本上下文中断无法执行,添加load事件监听也没用——跳转后原脚本的运行环境已经消失,监听不会生效。
方案一:改进版书签脚本(无需跳转页面直接解析)
不用先跳转到目标页面,直接在当前页面发起请求获取目标页面的HTML内容,解析出需要的链接后再跳转。代码如下:
javascript:(async function(){ try { const response = await fetch('https://rasp.tpu.ru/site/department.html?id=7950&cource=1'); const html = await response.text(); const parser = new DOMParser(); const doc = parser.parseFromString(html, 'text/html'); const targetLink = Array.from(doc.querySelectorAll('a')).find(el => el.href.includes('gruppa_42148')); if(targetLink) { window.location.href = targetLink.href; } else { alert('未找到目标链接'); } } catch(err) { alert('获取页面失败:' + err.message); } })();
原理
直接在当前页面通过fetch获取目标页面的HTML,用DOMParser解析成DOM结构后查找目标链接,最后完成跳转。全程不需要离开当前页面,避免了书签脚本跳转后上下文丢失的问题。
方案二:Tampermonkey脚本+触发书签
通过给目标页面添加自定义URL参数,让Tampermonkey脚本只在通过书签访问时触发自动跳转。
1. 安装Tampermonkey脚本
打开Tampermonkey的脚本编辑器,粘贴以下代码并保存:
// ==UserScript== // @name 自动跳转指定课程链接 // @namespace http://tampermonkey.net/ // @version 0.1 // @description 当通过特定书签访问目标页面时,自动跳转到包含gruppa_42148的链接 // @author You // @match https://rasp.tpu.ru/site/department.html?id=7950&cource=1 // @grant none // ==/UserScript== (function() { 'use strict'; // 检查URL是否带有自定义触发标记 const urlParams = new URLSearchParams(window.location.search); if(urlParams.get('from_bookmark') === '1') { // 循环检查元素是否加载完成 function checkAndRedirect() { const targetLink = Array.from(document.querySelectorAll('a')).find(el => el.href.includes('gruppa_42148')); if(targetLink) { window.location.href = targetLink.href; } else { setTimeout(checkAndRedirect, 500); // 未找到则每隔0.5秒重试一次 } } checkAndRedirect(); } })();
2. 创建触发书签
新建一个书签,将书签的地址设置为:
https://rasp.tpu.ru/site/department.html?id=7950&cource=1&from_bookmark=1
原理
点击书签时,会打开带from_bookmark=1参数的目标页面,Tampermonkey脚本检测到这个参数后,会持续检查页面中的目标链接,找到后自动完成跳转。
内容的提问来源于stack exchange,提问作者John Snow
相关产品推荐
相关产品推荐

