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

B站专栏的iframe内容获取失败的求助

[复制链接]
  • TA的每日心情
    开心
    2024-2-27 14:20
  • 签到天数: 88 天

    [LV.6]常住居民II

    22

    主题

    97

    回帖

    306

    积分

    荣誉开发者

    积分
    306

    油中2周年新人报道荣誉开发者生态建设者

    发表于 2023-1-8 17:47:13 | 显示全部楼层 | 阅读模式
    悬赏1油猫币未解决

    本帖最后由 bigonion 于 2023-1-9 01:59 编辑

    B站专栏的iframe内容获取失败的求助

    问题开端

    最近在弄B站markdown拓展,遇到了一个比较奇怪的问题
    首先到这里创作中心,需求就是获取到输入的正文innerHTML
    这里的正文被嵌套在一个id为ueditor_0的iframe里面,src是一段JavaScript(看不懂他在执行什么)
    如果直接控制台输入

    > document.getElementById('ueditor_0')//返回null
    < null

    你会找不到iframe里面的这个元素,这个元素就是请输入正文的body

    image.png
    ctrl+shift + C找到这个元素image.png
    你只要点一下 源代码里面的 iframe 后再返回控制台后输入同样的代码image.png
    这时候就又能获取到元素了
    这到底是为什么呢,为什么点击源代码里面的 iframe 之前,没法从控制台获取元素,点击后就可以了?
    这就导致我没法从油猴里面获取到元素了,有点头疼,希望大家帮看看是啥情况(っ °Д °;)っ

    问题新增1-没法从外层获取 (已解决)

    现在没办法从最外层的网址获取到最内层的iframe的body
    我在最外层的html的控制台输入

    document.querySelector("#edit-article-box > div > iframe")

    能找到嵌套的第一层
    但是我在油猴console.log(document.querySelector("#edit-article-box > div > iframe"))就显示null这里油猴的document我用

    const document = unsafeWindow.document
    console.log(document)

    重新赋值了(也grant了)
    输出的document也确实是最外层的document
    image.png

    问题1解决方案

    // @run-at document-end

    尽管我加了window.onload
    但是iframe比较特殊,没办法在最外层onload的时候确保内层iframe也onload了,所以才会找不到元素

    问题新增2-iframe跨域报错

    最外层输入找到iframe了,但是访问contentWindow报跨域错误了
    image.png

    这回没辙了,求助求助

  • TA的每日心情
    开心
    2024-2-27 14:20
  • 签到天数: 88 天

    [LV.6]常住居民II

    22

    主题

    97

    回帖

    306

    积分

    荣誉开发者

    积分
    306

    油中2周年新人报道荣誉开发者生态建设者

    发表于 2023-1-8 18:18:59 | 显示全部楼层
    还有一个问题,document居然指向Iframe了,是被重写了吗
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-13 10:14
  • 签到天数: 211 天

    [LV.7]常住居民III

    294

    主题

    3905

    回帖

    3825

    积分

    管理员

    积分
    3825

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

    发表于 2023-1-8 20:15:46 | 显示全部楼层

    image.png

    我看了一下,好像这样就可以获取内容

    editor.body.innerHTML
    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。/ 微信公众号:一之哥哥
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-2-28 23:59
  • 签到天数: 191 天

    [LV.7]常住居民III

    637

    主题

    5196

    回帖

    6078

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6078

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

    发表于 2023-1-8 20:15:48 | 显示全部楼层
    点击了对应元素 window也会切换到相应的firame里
    相当于切换了代码的全局作用域位置
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

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

    [LV.1]初来乍到

    22

    主题

    862

    回帖

    1361

    积分

    荣誉开发者

    积分
    1361

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

    发表于 2023-1-8 20:42:31 | 显示全部楼层
    iframe嵌套了,一般这种点一下才能获取到元素的都是iframe问题(因为控制台会自动切换环境),你的情况属于iframe被嵌套在另一个iframe中,所以需要先match到这个iframe下再获取元素。第二个iframe是代码生成的,地址是about:blank,油猴似乎无法直接match进这种类型的iframe,不过他跟上一个是同源,可以用iframe.contentDocument访问。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-2-27 14:20
  • 签到天数: 88 天

    [LV.6]常住居民II

    22

    主题

    97

    回帖

    306

    积分

    荣誉开发者

    积分
    306

    油中2周年新人报道荣誉开发者生态建设者

    发表于 2023-1-8 22:55:11 | 显示全部楼层
    cxxjackie 发表于 2023-1-8 20:42
    iframe嵌套了,一般这种点一下才能获取到元素的都是iframe问题(因为控制台会自动切换环境),你的情况属于 ...

    感谢gg!
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-2-27 14:20
  • 签到天数: 88 天

    [LV.6]常住居民II

    22

    主题

    97

    回帖

    306

    积分

    荣誉开发者

    积分
    306

    油中2周年新人报道荣誉开发者生态建设者

    发表于 2023-1-9 00:48:46 | 显示全部楼层
    王一之 发表于 2023-1-8 20:15
    [md]!(data/attachment/forum/202301/08/201448sndymfcybd78z99a.png)

    我看了一下,好像这样就可以获取内 ...

    gg 你试试刷新进去后直接控制台输入
    editor.body.innerHTML应该是不行的
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-2-27 14:20
  • 签到天数: 88 天

    [LV.6]常住居民II

    22

    主题

    97

    回帖

    306

    积分

    荣誉开发者

    积分
    306

    油中2周年新人报道荣誉开发者生态建设者

    发表于 2023-1-9 02:00:47 | 显示全部楼层
    李恒道 发表于 2023-1-8 20:15
    点击了对应元素 window也会切换到相应的firame里
    相当于切换了代码的全局作用域位置 ...

    现在又报跨域错误了
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-2-28 23:59
  • 签到天数: 191 天

    [LV.7]常住居民III

    637

    主题

    5196

    回帖

    6078

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6078

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

    发表于 2023-1-9 09:22:45 | 显示全部楼层
    bigonion 发表于 2023-1-9 02:00
    现在又报跨域错误了

    怎么出发的跨域错误
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-13 10:14
  • 签到天数: 211 天

    [LV.7]常住居民III

    294

    主题

    3905

    回帖

    3825

    积分

    管理员

    积分
    3825

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

    发表于 2023-1-9 10:09:28 | 显示全部楼层

    bigonion 发表于 2023-1-9 02:00

    现在又报跨域错误了

    之前没注意iframe的问题

    这个页面好像是有csp策略

    image.png

    可以试试@match这个iframe页面https://member.bilibili.com/article-text/home

    用GM_setValue通信的方式去获取内容?

    或者直接在这个页面上写脚本进行操作了,不要@match https://member.bilibili.com/platform/upload/text/edit

    @match https://member.bilibili.com/article-text/home

    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。/ 微信公众号:一之哥哥
    回复

    使用道具 举报

    发表回复

    本版积分规则

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