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

怎么控制另一个标签页?

[复制链接]

该用户从未签到

5

主题

14

回帖

10

积分

助理工程师

积分
10
发表于 2021-9-22 12:01:27 | 显示全部楼层 | 阅读模式
油猴脚本在A页面,并且A页面有一个按钮。
想实现的功能是:点击按钮,在新标签页打开B页面,并在B页面的表单域自动填入一些文字。

简言之,怎么操纵另一个标签页的元素?
  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    881

    回帖

    1379

    积分

    荣誉开发者

    积分
    1379

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2021-9-22 12:11:44 | 显示全部楼层
    让脚本同时match两个页面,根据location.href分别处理不同逻辑,需要交互数据时,用postMessage或GM_addValueChangeListener实现。同一页面的跨域iframe也是用这种方法处理。
    回复

    使用道具 举报

    该用户从未签到

    5

    主题

    14

    回帖

    10

    积分

    助理工程师

    积分
    10
    发表于 2021-9-22 12:16:35 | 显示全部楼层
    楼上说的可能不适合我的需求。

    我的要求是这样的:打开的新页面B的网址以及需要在新页面B表单域自动输入的文字每次都是不同的,需要解析A页面才能得到。

    有点类似百度云: 在A页面解析出百度盘的下载地址和提取码,然后在B页面打开,并自动填入提取码。
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    881

    回帖

    1379

    积分

    荣誉开发者

    积分
    1379

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2021-9-22 12:34:30 | 显示全部楼层
    xyb_yuan 发表于 2021-9-22 12:16
    楼上说的可能不适合我的需求。

    我的要求是这样的:打开的新页面B的网址以及需要在新页面B表单域自动输入的 ...

    其实还是一样,只是由于B页面的地址不定,脚本只能include *,然后在A页面令w = window.open(),这个w就是目标页面的window(不能直接操作这个window,但是可以postMessage),直接w.postMessage把数据发过去就行了,最好加一个特征码包装一下,然后另一边监听这个特征码的message。
    回复

    使用道具 举报

    该用户从未签到

    5

    主题

    14

    回帖

    10

    积分

    助理工程师

    积分
    10
    发表于 2021-9-22 12:41:27 | 显示全部楼层
    学习了。原来就是前端知识在这个场景下的绝妙应用啊。
    看来还是前端学的不扎实。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    前天 13:37
  • 签到天数: 213 天

    [LV.7]常住居民III

    305

    主题

    4196

    回帖

    4061

    积分

    管理员

    积分
    4061

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

    发表于 2021-9-22 13:41:04 | 显示全部楼层
    有学习问题建议可以去悬赏区:https://bbs.tampermonkey.net.cn/forum-77-1.html
    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    前天 08:59
  • 签到天数: 532 天

    [LV.9]以坛为家II

    148

    主题

    420

    回帖

    1215

    积分

    版主

    积分
    1215

    油中2周年生态建设者

    发表于 2021-9-22 15:22:44 | 显示全部楼层
    这需求是我的话。。就去用填表了
    I don't hate programming but the fucking world.
    回复

    使用道具 举报

    该用户从未签到

    5

    主题

    14

    回帖

    10

    积分

    助理工程师

    积分
    10
    发表于 2021-9-25 11:04:49 | 显示全部楼层
    经验证,postMessage()方法在chrome的多个标签页间无效。
    网上查了一下。chrome的多个标签页之间是独立的进程,不能相互通信。
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    881

    回帖

    1379

    积分

    荣誉开发者

    积分
    1379

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2021-9-25 19:38:19 | 显示全部楼层
    xyb_yuan 发表于 2021-9-25 11:04
    经验证,postMessage()方法在chrome的多个标签页间无效。
    网上查了一下。chrome的多个标签页之间是独立的进 ...

    我试过是可以的,是不是时机的问题?你open以后不要立即postMessage,因为另一边的脚本可能还没有注入,加一个延迟再试试,不行就用GM_addValueChangeListener。
    回复

    使用道具 举报

    该用户从未签到

    5

    主题

    14

    回帖

    10

    积分

    助理工程师

    积分
    10
    发表于 2021-9-26 10:34:46 | 显示全部楼层
    还是GM系列函数省事。 postMessage费劲啊。
    回复

    使用道具 举报

    发表回复

    本版积分规则

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