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

怎么控制另一个标签页?

[复制链接]

该用户从未签到

5

主题

19

帖子

10

积分

助理工程师

Rank: 1

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

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

    [LV.1]初来乍到

    13

    主题

    414

    帖子

    722

    积分

    荣誉开发者

    Rank: 10Rank: 10Rank: 10

    积分
    722

    活跃会员热心会员突出贡献三好学生猫咪币纪念章中秋纪念章国庆纪念章荣誉开发者

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

    使用道具 举报

    该用户从未签到

    5

    主题

    19

    帖子

    10

    积分

    助理工程师

    Rank: 1

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

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

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

    使用道具 举报

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

    [LV.1]初来乍到

    13

    主题

    414

    帖子

    722

    积分

    荣誉开发者

    Rank: 10Rank: 10Rank: 10

    积分
    722

    活跃会员热心会员突出贡献三好学生猫咪币纪念章中秋纪念章国庆纪念章荣誉开发者

    发表于 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

    主题

    19

    帖子

    10

    积分

    助理工程师

    Rank: 1

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

    使用道具 举报

  • TA的每日心情
    慵懒
    8 小时前
  • 签到天数: 69 天

    [LV.6]常住居民II

    152

    主题

    2019

    帖子

    2149

    积分

    管理员

    Rank: 10Rank: 10Rank: 10

    积分
    2149

    猫咪币纪念章热心会员活跃会员突出贡献三好学生中秋纪念章国庆纪念章管理员家财万贯

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

    使用道具 举报

  • TA的每日心情
    慵懒
    前天 10:48
  • 签到天数: 97 天

    [LV.6]常住居民II

    143

    主题

    525

    帖子

    849

    积分

    版主

    Rank: 8Rank: 8

    积分
    849

    猫咪币纪念章三好学生活跃会员热心会员突出贡献中秋纪念章国庆纪念章宣传达人推广达人

    发表于 2021-9-22 15:22:44 | 显示全部楼层
    这需求是我的话。。就去用填表了
    bilibili:陈公子的话   公众号:陈公子的话
    回复

    使用道具 举报

    该用户从未签到

    5

    主题

    19

    帖子

    10

    积分

    助理工程师

    Rank: 1

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

    使用道具 举报

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

    [LV.1]初来乍到

    13

    主题

    414

    帖子

    722

    积分

    荣誉开发者

    Rank: 10Rank: 10Rank: 10

    积分
    722

    活跃会员热心会员突出贡献三好学生猫咪币纪念章中秋纪念章国庆纪念章荣誉开发者

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

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

    使用道具 举报

    该用户从未签到

    5

    主题

    19

    帖子

    10

    积分

    助理工程师

    Rank: 1

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

    使用道具 举报

    发表回复

    本版积分规则

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