上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
12下一页
返回列表 发新帖

GM_addValueChangeListener和GM_getValue在iframe下异常?

[复制链接]

该用户从未签到

1

主题

9

回帖

13

积分

助理工程师

积分
13
发表于 2022-11-10 15:46:25 | 显示全部楼层 | 阅读模式

今天开发学习通的脚本,在课程页面遇到了一个意想不到的问题,在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秒后也是同样无法触发更新。

这个问题已经困扰我两天了,在线求教育。

该用户从未签到

1

主题

9

回帖

13

积分

助理工程师

积分
13
发表于 2022-11-10 16:08:53 | 显示全部楼层
另外有没有开发者交流群?
回复

使用道具 举报

  • TA的每日心情
    开心
    6 小时前
  • 签到天数: 213 天

    [LV.7]常住居民III

    305

    主题

    4189

    回帖

    4056

    积分

    管理员

    积分
    4056

    管理员荣誉开发者油中2周年生态建设者喜迎中秋油中3周年挑战者 lv2

    发表于 2022-11-10 16:17:40 | 显示全部楼层
    fengmingmin 发表于 2022-11-10 16:08
    另外有没有开发者交流群?

    有的,但是有门槛

    https://bbs.tampermonkey.net.cn/thread-1234-1-1.html
    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    6 小时前
  • 签到天数: 213 天

    [LV.7]常住居民III

    305

    主题

    4189

    回帖

    4056

    积分

    管理员

    积分
    4056

    管理员荣誉开发者油中2周年生态建设者喜迎中秋油中3周年挑战者 lv2

    发表于 2022-11-10 16:24:43 | 显示全部楼层

    使用的脚本猫吗?也许是bug。。。。贴一下你的代码和管理器、浏览器版本

    我使用最新版本的脚本猫(0.10.0),使用如下代码测试正常

    // ==UserScript==
    // @name         页面脚本
    // @namespace    https://bbs.tampermonkey.net.cn/
    // @version      0.1.0
    // @description  try 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);
    // ==UserScript==
    // @name         iframe脚本
    // @namespace    https://bbs.tampermonkey.net.cn/
    // @version      0.1.0
    // @description  try 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);
    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。
    回复

    使用道具 举报

    该用户从未签到

    1

    主题

    9

    回帖

    13

    积分

    助理工程师

    积分
    13
    发表于 2022-11-10 17:03:09 | 显示全部楼层
    本帖最后由 fengmingmin 于 2022-11-10 20:36 编辑
    1. // ==UserScript==

    2. // [url=home.php?mod=space&uid=23356]@name[/url]         测试脚本

    3. // @namespace   https://bbs.tampermonkey.net.cn/

    4. // @description 测试

    5. // @version     1.0.0

    6. // @author      脚本作者

    7. // @storageName test

    8. // @grant       unsafeWindow

    9. // @grant       GM_setValue

    10. // @grant       GM_getValue

    11. // @grant       GM_deleteValue

    12. // @grant       GM_addValueChangeListener

    13. // @grant       GM_removeValueChangeListener

    14. // [url=home.php?mod=space&uid=52134]@match[/url]       ://mooc2-ans.chaoxing.com/visit/interaction

    15. // ==/UserScript==

    16. /*  这个地方不匹配主页面,只匹配下面的名为 “frame_content” 的iframe框架 // @match       ://.chaoxing.com* */

    17. (function () {

    18. 'use strict';

    19. const test = GM_setValue("test", 1234);

    20. //运行后控制台2秒显示一次1234,之后在存储内修改test,发现没变化

    21. window.setInterval(function () {

    22. console.log();

    23. const test = GM_getValue("test", []);

    24. console.log(test);

    25. }, 2000);

    26. // Your code here...

    27. })();
    复制代码

    回复

    使用道具 举报

    该用户从未签到

    1

    主题

    9

    回帖

    13

    积分

    助理工程师

    积分
    13
    发表于 2022-11-10 17:04:37 | 显示全部楼层
    回复

    使用道具 举报

    该用户从未签到

    1

    主题

    9

    回帖

    13

    积分

    助理工程师

    积分
    13
    发表于 2022-11-10 17:07:07 | 显示全部楼层
    王一之 发表于 2022-11-10 16:24
    [md]使用的脚本猫吗?也许是bug。。。。贴一下你的代码和管理器、浏览器版本

    我使用最新版本的脚本猫(0.10 ...

    浏览器版本
    Microsoft Edge
    版本 107.0.1418.35 (正式版本) (64 位)

    脚本猫使用当前稳定版
    回复

    使用道具 举报

  • TA的每日心情
    开心
    6 小时前
  • 签到天数: 213 天

    [LV.7]常住居民III

    305

    主题

    4189

    回帖

    4056

    积分

    管理员

    积分
    4056

    管理员荣誉开发者油中2周年生态建设者喜迎中秋油中3周年挑战者 lv2

    发表于 2022-11-10 17:36:12 | 显示全部楼层
    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)
    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。
    回复

    使用道具 举报

    该用户从未签到

    1

    主题

    9

    回帖

    13

    积分

    助理工程师

    积分
    13
    发表于 2022-11-10 20:21:06 | 显示全部楼层
    王一之 发表于 2022-11-10 17:36
    哥哥试试最新的?另外最好贴一下脚本吧,简化的也行,要能复现你说的问题,我在我这试试

    [预发布]脚本猫v ...

    脚本我在上面已经贴了一个简化的,就在5楼
    回复

    使用道具 举报

  • TA的每日心情
    开心
    6 小时前
  • 签到天数: 213 天

    [LV.7]常住居民III

    305

    主题

    4189

    回帖

    4056

    积分

    管理员

    积分
    4056

    管理员荣誉开发者油中2周年生态建设者喜迎中秋油中3周年挑战者 lv2

    发表于 2022-11-10 21:10:32 | 显示全部楼层

    貌似是@match的问题,脚本都没有执行,哥哥试试下面这个代码

    // ==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...
    })();
    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。
    回复

    使用道具 举报

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表