如何无需修改设备日期让iframe中的WebUntis显示指定日期课程表?
解决iframe嵌入WebUntis指定日期的方法
核心问题说明
你之前修改主页面的Date对象无效,是因为iframe属于独立的页面上下文,且WebUntis页面是读取dojoConfig.grupet.currentDate这个预设变量,而非直接获取系统时间,得从这个变量入手处理。
分场景解决方案:
同源场景(你的网站和WebUntis页面同域名/协议/端口)
等iframe加载完成后,直接操作它的window对象修改目标变量:// 假设你的iframe的id为webuntisFrame const iframe = document.getElementById('webuntisFrame'); iframe.onload = function() { // 注意日期格式要和原页面grupet.currentDate一致,比如'2023-09-09'或对应时间戳 iframe.contentWindow.dojoConfig.grupet.currentDate = '2023-09-09'; // 部分场景下需要触发页面刷新逻辑,比如调用原页面的刷新函数: // iframe.contentWindow.refreshCourseSchedule(); };若不清楚刷新函数,可修改变量后手动刷新iframe,或查看原页面的网络请求逻辑模拟触发数据加载。
跨域场景(网站与WebUntis页面不同源)
浏览器同源策略会限制直接操作iframe变量,可尝试以下两种方式:- URL参数传参测试:多数教务系统支持通过URL参数指定日期,将iframe的src修改为
原WebUntis地址?date=2023-09-09(参数名可能为day/selectedDate,需自行测试)。 - 浏览器脚本修改:安装Tampermonkey油猴脚本,编写脚本在WebUntis页面加载时修改目标变量,示例如下:
脚本直接运行在WebUntis页面上下文,不受跨域限制。// ==UserScript== // @name WebUntis 指定日期 // @match WebUntis页面的完整地址 // @grant none // ==/UserScript== window.addEventListener('load', function() { // 替换为你需要的日期,格式与原页面保持一致 dojoConfig.grupet.currentDate = '2023-09-09'; // 触发页面数据刷新,比如模拟点击刷新按钮: // document.querySelector('.refresh-button').click(); });
- URL参数传参测试:多数教务系统支持通过URL参数指定日期,将iframe的src修改为
补充提示
你之前编写的修改Date对象的代码,仅作用于主页面,iframe内的Date是独立的,且目标页面并未直接调用new Date()获取当前时间,因此无法生效,必须针对dojoConfig.grupet.currentDate进行修改。
内容的提问来源于stack exchange,提问作者paul00
相关产品推荐
相关产品推荐

