将窗口移动到 iframe 而不重新加载

Tom*_*ica 5 javascript iframe dom

我不想创建一个即使我单击链接也会保留其实例的用户脚本。

为了使脚本实例(即变量等)持续存在,我需要在 iframe 中浏览我正在浏览的页面,它是运行脚本的窗口的子窗口。而且,父文档位置必须与内部文档位置相同 - 否则我会遇到同源策略问题。

也就是说,我不想改变这个:

<html>
  <head>
    ...
  </head>
  <body>
     ...page contents...
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

进入这个:

<html>
  <head>
    ...here is my userscript running...

  </head>
  <body>
     <iframe style="width: 100%; height: 100%">
        ...move the whole original window here...

     </iframe>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

除非链接具有target="_blank/_parent/_top"所有浏览活动,否则应在内部 iframe 中发生,而父窗口不应刷新(这将导致脚本丢失所有变量)。

一种方法是简单地创建一个具有与我网站的 url 相同的 url 的 iframe:

var container = document.createElement("iframe");
container.src = window.location;
Run Code Online (Sandbox Code Playgroud)

然而,这种方法会导致页面重新加载以及所有数据的丢失(填写的表单、滚动)。

因此,将window及其所有内容移动到 iframe 中。那可能吗?

enh*_*lep 0

也许您可以获取 document.head.outerHTML 和 document.body.outerHTML 的内容,将它们组合成一个字符串,对其进行 base64 编码,然后使用结果构造一个 dataURL,然后将其设置为 iframe 的 src。

尽管我可以看到递归将这个想法变成了类似于将摄像机指向显示其输出的屏幕的效果。

有趣的问题。已添加书签。