xyb_yuan 发表于 2021-9-22 12:01:27

怎么控制另一个标签页?

油猴脚本在A页面,并且A页面有一个按钮。
想实现的功能是:点击按钮,在新标签页打开B页面,并在B页面的表单域自动填入一些文字。

简言之,怎么操纵另一个标签页的元素?

cxxjackie 发表于 2021-9-22 12:11:44

让脚本同时match两个页面,根据location.href分别处理不同逻辑,需要交互数据时,用postMessage或GM_addValueChangeListener实现。同一页面的跨域iframe也是用这种方法处理。

xyb_yuan 发表于 2021-9-22 12:16:35

楼上说的可能不适合我的需求。

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

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

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

xyb_yuan 发表于 2021-9-22 12:41:27

学习了。原来就是前端知识在这个场景下的绝妙应用啊。
看来还是前端学的不扎实。

王一之 发表于 2021-9-22 13:41:04

有学习问题建议可以去悬赏区:https://bbs.tampermonkey.net.cn/forum-77-1.html

陈公子的话 发表于 2021-9-22 15:22:44

这需求是我的话。。就去用填表了

xyb_yuan 发表于 2021-9-25 11:04:49

经验证,postMessage()方法在chrome的多个标签页间无效。
网上查了一下。chrome的多个标签页之间是独立的进程,不能相互通信。

cxxjackie 发表于 2021-9-25 19:38:19

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

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

xyb_yuan 发表于 2021-9-26 10:34:46

还是GM系列函数省事。 postMessage费劲啊。
页: [1] 2
查看完整版本: 怎么控制另一个标签页?