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

5

我想制作一个用户脚本,即使我点击链接也能保持其实例。

为了使脚本实例(如变量等)持久化,我需要在iframe中打开页面,该iframe是运行脚本的窗口的子窗口。此外,父文档位置必须与内部文档位置相同-否则我将遇到同源策略的问题。

也就是说,我希望将这个:

<html>
  <head>
    ...
  </head>
  <body>
     ...page contents...
  </body>
</html>

将其转化为:

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

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

     </iframe>
  </body>
</html>

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

一种方法是简单地创建一个与我的站点URL相同的iframe:

var container = document.createElement("iframe");
container.src = window.location;

然而,这种方法会导致页面刷新以及所有数据的丢失(包括填写的表单和滚动条位置)。

因此,将window及其内容移动到一个iframe中。这是否可行?


Tomas,这是一个非常有趣的问题,我自己也在努力解决。你找到答案了吗?就目前而言,我认为需要更改iframe的窗口和文档引用,以及它对html、body和head标签的任何引用。不幸的是,如果这些引用被封装在窗口对象的函数中,几乎没有办法更改它们。你有什么好运气吗? - AlexZ
还没有收到答案。 - Tomáš Zato
1
是的,我到目前为止的所有研究都表明这是不可能的,这真是太遗憾了。 - AlexZ
1个回答

0

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

虽然我可以看到递归将这个想法变成类似于将视频摄像机对准显示其输出的屏幕的效果。

有趣的问题。已加书签。


我会确保iframe中的内部页面意识到它已经由用户脚本维护。不过这是个好点子。 - Tomáš Zato

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接