[请益] javascript 如何跨源存取 iframe 内容

楼主: alan23273850   2023-03-12 14:41:34
如题,学校网站课程影片的连结是存在某个 iframe 里面,
由于我想要自己写一个 Chrome extension 存取该连结并下载它,
脚本通常是用 javascript 写,如果是下列写法,
iframe = document.getElementById("tool_content");
iframe.contentDocument 会因为 CORS 机制而存取不到,
想问板上各路大神是否有一个针对此问题的超强力解法?... (Q1)
此外,下载影片的方式我也想询问,如果是右下角出现
Download
Playback speed
Picture in picture
这三者选单的画面的话,有没有也可以直接用 javascript 或其他等价方法的
下载方式呢?... (Q2)
上述两个解答有效的话,都有丰厚批币,但第一个问题较为重要,谢谢囉~
楼主: alan23273850   2023-03-12 15:55:00
其中一个作法可能是把 console.log(iframe) 的输出转成字串就能处理,但这个动作我也一直找不到解法:(
作者: MoonCode (MoonCode)   2023-03-12 16:08:00
https://github.com/rndme/download原理是仿造一个网页元素去下载?好像不行耶 感觉要先把 cors 相关先念熟 我先躺了可能要从浏览器缓存或是网络层下手了 这有专业的人在做
作者: s06yji3 (阿南)   2023-03-12 16:24:00
用postMessage和MessageEvent
楼主: alan23273850   2023-03-12 16:36:00
回楼上,postMessage 是很多人提出的解法,但我不知道具体要怎么去修改校网传来的 iframe,能加在 tag里面吗?iframe 本身有办法把自己的 content 丢出来吗?
作者: stupid0319 (征女友)   2023-03-12 17:20:00
proxy server
楼主: alan23273850   2023-03-12 17:26:00
回楼上,自己架的话可能可以 (不清楚细节),但如果要作成 extension 发布,总不可能叫人家自己架一个?
作者: wulouise (在线上!=在电脑前)   2023-03-12 17:30:00
只是要抓影片wget不就结束了?
作者: s06yji3 (阿南)   2023-03-12 17:30:00
预期是inject一个script到网页上去取得iFrame资料
作者: ssccg (23)   2023-03-12 17:33:00
要跨网域存取,一定需要你要存取的网页配合,以你的情况来说就是script要执行在iframe里那个网页上,只改外面的网页无论如何都是不行的(否则就是浏览器需要修补的安全性漏洞)
楼主: alan23273850   2023-03-12 17:37:00
回复 @s06yji3,我不确定 Chrome extension 能否这
作者: ssccg (23)   2023-03-12 17:37:00
但是你是extension,所以应该是直接inject script到iframe
作者: ssccg (23)   2023-03-12 17:38:00
里面那个网页去配合
楼主: alan23273850   2023-03-12 17:38:00
Chrome extension 可以 inject script 到本地网页去捞那个 iframe 的内容,然后再回传到自己的script吗
作者: ssccg (23)   2023-03-12 17:43:00
楼主: alan23273850   2023-03-12 17:50:00
谢谢楼上,看起来可以用上,但我这两天爆试已经很累
作者: s06yji3 (阿南)   2023-03-12 17:54:00
哦,好像inject到iframe 比较直接
楼主: alan23273850   2023-03-12 17:54:00
所有的 nested iframe 也可以 inject 吗?
作者: MarcoReus (Marco Reus)   2023-03-12 19:16:00
如果iframe 网址已知 我会用background script 直接去捞 @@
作者: MoonCode (MoonCode)   2023-03-12 19:23:00
干好猛 学习到了阿 我还是看不懂 等原po 实验成功回来教教我QQ
楼主: alan23273850   2023-03-12 21:43:00
有两个都是 <iframe src="about:blank" ...,但我只要其中一个,这样有办法吗?
作者: superpandal   2023-03-12 22:23:00
这东西之前弄过 但安全起见还有更好的方式式
楼主: alan23273850   2023-03-13 00:15:00
回楼上,如果是自己写的脚本应该没有安全顾虑?求解
作者: superpandal   2023-03-13 00:34:00
这方式本来就有安全疑虑 无关是不是自己写写 不硬要可以更安全至于自己写的可以写的更绝一点
作者: Arctica (欲聆听,必先静默)   2023-03-13 12:36:00
直觉要透过前端做就是会被browser挡
楼主: alan23273850   2023-03-13 12:52:00
@superpandal 想请问大大有实际范例可以参考吗?
作者: MarcoReus (Marco Reus)   2023-03-13 13:34:00
原po能提供你的iframe 格式吗?
作者: superpandal   2023-03-13 17:23:00
在公司弄的 现在也没空 在研究其它的你多看mdn 再实作一下不就懂了...
楼主: alan23273850   2023-03-13 18:53:00
Marco大 https://imgur.com/T9VuDsg 这张图可以吗?
作者: Hsins (翔)   2023-03-13 21:54:00
src="about:blank" 的话,找看看是不是有某段 JS 生出来的还是 server-side 本身就故意要这样塞,前者的话可以直接找到资源网址吧
作者: Saaski (GreedIsGood)   2023-03-13 22:03:00
某s就是在嘴砲而已,他平常回文就那样,不用理他
楼主: alan23273850   2023-03-13 22:18:00
回 @Hsins,这目前对我来说是 undecidable 问题哈哈
作者: MarcoReus (Marco Reus)   2023-03-14 19:21:00
我猜你的iframe 内容是其他js塞的 看一下network 的request 有没有你要的关键字
楼主: alan23273850   2023-03-14 23:59:00
我好像找到解法了!!!大致上是去筛 server 送来的response body 里面出现的影片 url,详细解法等我实作完之后再上来告诉大家!奖金的发放也是。
作者: qq1217 (...)   2023-03-15 00:05:00
期待解法
作者: q00153 (TB)   2023-03-17 07:27:00
这个简单的需求,使用脚本外挂就拿做到

Links booklink

Contact Us: admin [ a t ] ucptt.com