使用脚本注入打开的窗口

用户名

这个问题要求一种方法来使用打开一个新窗口window.open,然后将其注入脚本。由于存在跨域安全问题,因此无法实现。

但是,我的问题是我想做完全相同的事情,除了从同一域到同一域。这可能吗?

请注意,.write这不会解决此问题,因为它会首先擦除页面中的所有html。

用户名

您可以执行以下操作:

var theWindow = window.open('http://stackoverflow.com'),
    theDoc = theWindow.document,
    theScript = document.createElement('script');
function injectThis() {
    // The code you want to inject goes here
    alert(document.body.innerHTML);
}
theScript.innerHTML = 'window.onload = ' + injectThis.toString() + ';';
theDoc.body.appendChild(theScript);

这似乎也可行:

var theWindow = window.open('http://stackoverflow.com'),
    theScript = document.createElement('script');
function injectThis() {
    // The code you want to inject goes here
    alert(document.body.innerHTML);
}
// Self executing function
theScript.innerHTML = '(' + injectThis.toString() + '());';
theWindow.onload = function () {
    // Append the script to the new window's body.
    // Only seems to work with `this`
    this.document.body.appendChild(theScript);
};

如果由于某种原因您想使用eval:

var theWindow = window.open('http://stackoverflow.com'),
    theScript;
function injectThis() {
    // The code you want to inject goes here
    alert(document.body.innerHTML);
}
// Self executing function
theScript = '(' + injectThis.toString() + '());';
theWindow.onload = function () {
    this.eval(theScript);
};

这是做什么的(代码的第一部分的解释。所有示例都非常相似):

  • 开启新视窗
  • 获取对新窗口的引用 document
  • 创建一个脚本元素
  • 将您要“注入”的所有代码放入函数中
  • 更改脚本innerHTML以在窗口加载时加载带有window.onload事件的功能(您也可以使用addEventListener)。toString()为方便起见,所以您不必连接一堆字符串。toString基本上injectThis以字符串形式返回整个函数。
  • 将脚本追加到新窗口的document.body,它实际上不会将其追加到已加载的文档中,而是会在载入之前将其追加(到一个空的正文中),这就是为什么必须使用window.onload,以便脚本可以操纵新文件。

如果您的新页面中已有使用该事件的脚本(它将覆盖注入脚本),则最好使用window.addEventListener('load', injectThis.toString());代替,这是个好主意window.onloadwindow.onload

请注意,您可以在injectThis函数内部执行任何操作:追加DIV,执行DOM查询,添加更多脚本等。

另请注意,您可以theWindow.onload使用事件内部操纵新窗口的DOM this

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Shell脚本打开和平铺窗口

来自分类Dev

使用脚本使所有打开的终端窗口向前移动

来自分类Dev

使用给定的html和javascript(脚本标记)打开新窗口

来自分类Dev

使用脚本中的html打开浏览器窗口

来自分类Dev

使用依赖注入在Windows窗体中打开一个新的参数化窗口

来自分类Dev

从内容脚本注入脚本。窗口对象不可用

来自分类Dev

让Nautilus打开脚本作为“终端”窗口

来自分类Dev

在新窗口中打开链接-脚本

来自分类Dev

midori允许脚本打开弹出窗口

来自分类Dev

使用X11窗口的R脚本仅打开一秒钟

来自分类Dev

使用单个bash脚本在GNU屏幕上打开多个拆分窗口

来自分类Dev

当使用Apple脚本打开会议窗口时,如何从MS Outlook获取会议详细信息

来自分类Dev

使用X11窗口的R脚本仅打开一秒钟

来自分类Dev

使用 Tkinter 从这个脚本打开一个窗口

来自分类Dev

如何使用gulp注入脚本

来自分类Dev

脚本打开现有窗口而不是新窗口

来自分类Dev

使用JavaFX打开多个窗口

来自分类Dev

使用窗口打开的Javascript Mailto

来自分类Dev

使用Java打开终端窗口

来自分类Dev

使用Jquery打开模式窗口

来自分类Dev

使用SetWindowsHookEx观察打开的窗口

来自分类Dev

Firefox加载项显示注入脚本的弹出窗口

来自分类Dev

使用新窗口 (FXML) 进行 Spring 注入

来自分类Dev

使用脚本打开Anaconda Python

来自分类Dev

Ruby on Rails-无法使用Java脚本将第二个应用程序作为弹出窗口打开

来自分类Dev

使用键绑定/脚本打开bash终端应用程序,并在应用程序结束后保留/保留窗口

来自分类Dev

我可以使用 cron 启动 Perl 脚本,但我可以让它打开一个窗口吗?

来自分类Dev

OSX Shell脚本打开新的终端窗口并运行程序

来自分类Dev

打开终端窗口并在启动时执行Python脚本

Related 相关文章

  1. 1

    使用Shell脚本打开和平铺窗口

  2. 2

    使用脚本使所有打开的终端窗口向前移动

  3. 3

    使用给定的html和javascript(脚本标记)打开新窗口

  4. 4

    使用脚本中的html打开浏览器窗口

  5. 5

    使用依赖注入在Windows窗体中打开一个新的参数化窗口

  6. 6

    从内容脚本注入脚本。窗口对象不可用

  7. 7

    让Nautilus打开脚本作为“终端”窗口

  8. 8

    在新窗口中打开链接-脚本

  9. 9

    midori允许脚本打开弹出窗口

  10. 10

    使用X11窗口的R脚本仅打开一秒钟

  11. 11

    使用单个bash脚本在GNU屏幕上打开多个拆分窗口

  12. 12

    当使用Apple脚本打开会议窗口时,如何从MS Outlook获取会议详细信息

  13. 13

    使用X11窗口的R脚本仅打开一秒钟

  14. 14

    使用 Tkinter 从这个脚本打开一个窗口

  15. 15

    如何使用gulp注入脚本

  16. 16

    脚本打开现有窗口而不是新窗口

  17. 17

    使用JavaFX打开多个窗口

  18. 18

    使用窗口打开的Javascript Mailto

  19. 19

    使用Java打开终端窗口

  20. 20

    使用Jquery打开模式窗口

  21. 21

    使用SetWindowsHookEx观察打开的窗口

  22. 22

    Firefox加载项显示注入脚本的弹出窗口

  23. 23

    使用新窗口 (FXML) 进行 Spring 注入

  24. 24

    使用脚本打开Anaconda Python

  25. 25

    Ruby on Rails-无法使用Java脚本将第二个应用程序作为弹出窗口打开

  26. 26

    使用键绑定/脚本打开bash终端应用程序,并在应用程序结束后保留/保留窗口

  27. 27

    我可以使用 cron 启动 Perl 脚本,但我可以让它打开一个窗口吗?

  28. 28

    OSX Shell脚本打开新的终端窗口并运行程序

  29. 29

    打开终端窗口并在启动时执行Python脚本

热门标签

归档