GM_addValueChangeListener和GM_getValue在iframe下异常?
今天开发学习通的脚本,在课程页面遇到了一个意想不到的问题,在iframe下注入的脚本,无法实现GM_addValueChangeListener监听,GM_getValue放在定时器里,修改存储参数,前端console.log也无法正常打印。具体如下:1.脚本注入位置: http://i.chaoxing.com/base 下id为 #frame_content的框架,主框架因为没有什么需要操作的,就没有注入。
2.unsafewindow,storageName都已经设置
3.GM_addValueChangeListener监听storage变化,在其它页面修改这个参数,无法触发响应(可能是在添加完监听器才修改的监听对象),但是把GM_addValueChangeListener放在主页面却可以触发。
4.所有我又在#frame_content下写了如下代码:
window.setInterval(function () {
console.log();
const test =GM_getValue("test", []);
console.log(test);
}, 2000);
修改存储参数test的值,2秒后也是同样无法触发更新。
这个问题已经困扰我两天了,在线求教育。 另外有没有开发者交流群? fengmingmin 发表于 2022-11-10 16:08
另外有没有开发者交流群?
有的,但是有门槛
https://bbs.tampermonkey.net.cn/thread-1234-1-1.html 使用的脚本猫吗?也许是bug。。。。贴一下你的代码和管理器、浏览器版本
我使用最新版本的脚本猫(0.10.0),使用如下代码测试正常
```js
// ==UserScript==
// @name 页面脚本
// @namespace https://bbs.tampermonkey.net.cn/
// @version 0.1.0
// @descriptiontry to take over the world!
// @author You
// @match https://bbs.tampermonkey.net.cn/
// @storageName test
// @grant GM_setValue
// @grant GM_addValueChangeListener
// ==/UserScript==
GM_addValueChangeListener("test-iframe", (a,b,c,d,e) => {
console.log(a,b,c,d,e);
})
setInterval(() => {
GM_setValue("test-page", Date.now());
}, 1000);
```
```js
// ==UserScript==
// @name iframe脚本
// @namespace https://bbs.tampermonkey.net.cn/
// @version 0.1.0
// @descriptiontry to take over the world!
// @author You
// @match https://googleads.g.doubleclick.net/pagead/*
// @storageName test
// @grant GM_setValue
// @grant GM_addValueChangeListener
// ==/UserScript==
GM_addValueChangeListener("test-page", (a,b,c,d,e) => {
console.log(a,b,c,d,e);
})
setInterval(() => {
GM_setValue('test-iframe', Date.now());
}, 1000);
```
本帖最后由 fengmingmin 于 2022-11-10 20:36 编辑
// ==UserScript==
// @name 测试脚本
// @namespace https://bbs.tampermonkey.net.cn/
// @description 测试
// @version 1.0.0
// @author 脚本作者
// @storageName test
// @grant unsafeWindow
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_deleteValue
// @grant GM_addValueChangeListener
// @grant GM_removeValueChangeListener
// @match ://mooc2-ans.chaoxing.com/visit/interaction
// ==/UserScript==
/*这个地方不匹配主页面,只匹配下面的名为 “frame_content” 的iframe框架 // @match ://.chaoxing.com* */
(function () {
'use strict';
const test = GM_setValue("test", 1234);
//运行后控制台2秒显示一次1234,之后在存储内修改test,发现没变化
window.setInterval(function () {
console.log();
const test = GM_getValue("test", []);
console.log(test);
}, 2000);
// Your code here...
})();
fengmingmin 发表于 2022-11-10 17:03
大佬,代码如上 王一之 发表于 2022-11-10 16:24
使用的脚本猫吗?也许是bug。。。。贴一下你的代码和管理器、浏览器版本
我使用最新版本的脚本猫(0.10 ...
浏览器版本
Microsoft Edge
版本 107.0.1418.35 (正式版本) (64 位)
脚本猫使用当前稳定版 fengmingmin 发表于 2022-11-10 17:07
浏览器版本
Microsoft Edge
版本 107.0.1418.35 (正式版本) (64 位)
哥哥试试最新的?另外最好贴一下脚本吧,简化的也行,要能复现你说的问题,我在我这试试
[预发布]脚本猫v0.10.0-beta.1
https://bbs.tampermonkey.net.cn/thread-3540-1-1.html
(出处: 油猴中文网)
能安装这个版本的话最好(得有GitHub账号)
🐛 修复在sandbox页执行BroadcastChannel某些浏览器会报错 #107 · scriptscat/scriptcat@c4d4de4 (github.com)
王一之 发表于 2022-11-10 17:36
哥哥试试最新的?另外最好贴一下脚本吧,简化的也行,要能复现你说的问题,我在我这试试
[预发布]脚本猫v ...
脚本我在上面已经贴了一个简化的,就在5楼
貌似是`@match`的问题,脚本都没有执行,哥哥试试下面这个代码
```js
// ==UserScript==
// @name 测试脚本
// @namespace https://bbs.tampermonkey.net.cn/
// @description 测试
// @version 1.0.0
// @author 脚本作者
// @storageName test
// @grant unsafeWindow
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_deleteValue
// @grant GM_addValueChangeListener
// @grant GM_removeValueChangeListener
// @match *://*/visit/interaction*
// ==/UserScript==
/*这个地方不匹配主页面,只匹配下面的名为 “frame_content” 的iframe框架 // @match ://.chaoxing.com* */
(function () {
'use strict';
const test = GM_setValue("test", 1234);
//运行后控制台2秒显示一次1234,之后在存储内修改test,发现没变化
window.setInterval(function () {
console.log();
const test = GM_getValue("test", []);
console.log(test);
}, 2000);
// Your code here...
})();
```
页:
[1]
2