将 javascript 函数注入到 Iframe 中

2023-12-01

这个链接 (存档版本)描述了如何将脚本中的代码注入到 iframe 中:

function injectJS() {
  var iFrameHead = window.frames["myiframe"].document.getElementsByTagName("head")[0];
  var myscript = document.createElement('script');
  myscript.type = 'text/javascript';
  myscript.src = 'myscript.js'; // replace this with your SCRIPT
  iFrameHead.appendChild(myscript);
}

没关系,但是如果我想将函数对象插入 iframe 中怎么办?并在 iframe 上下文中执行它?假设我有:

function foo () {
    console.log ("Look at me, executed inside an iframe!", window);
}

我想在 iframe 中插入 foo 的代码? (函数 foo 可能是动态加载的东西,我不能只用引号将其括起来)

我天真地尝试过:

var scriptFooString = "<script>" + foo.toString() + "</script>"

获取函数内部的代码,但是

  • 我不知道如何将它插入到 iframe HEAD 中(也许使用 jquery?)
  • 我不知道这是否是正确的方法
  • 我不知道如果函数比这更复杂时会发生什么
  • 我不知道双引号和单引号会发生什么scriptFooString

有什么提示吗?


首先,只有当您的框架和显示它的页面位于同一域内时,您才能完成此操作(由于跨域规则)

其次可以直接通过JS操作frame的dom和window对象:

frames[0].window.foo = function(){
   console.log ("Look at me, executed inside an iframe!", window);
}

要从 DOMElement 对象获取框架,您可以使用:

var myFrame = document.getElementById('myFrame');

myFrame.contentWindow.foo = function(){
       console.log ("Look at me, executed inside an iframe!");
}

请注意,foo 中的范围没有更改,因此 window 仍然是 foo 内的父窗口等。

如果您想注入一些需要在另一个框架的上下文中运行的代码,您可以注入一个脚本标签,或对其进行评估:

frames[0].window.eval('function foo(){ console.log("Im in a frame",window); }');

尽管普遍的共识是永远不要使用 eval,但我认为如果您确实需要完成此任务,它是比 DOM 注入更好的选择。

因此,根据您的具体情况,您可以执行以下操作:

frames[0].window.eval(foo.toString());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 javascript 函数注入到 Iframe 中 的相关文章

随机推荐

  • MS Access 插入大型记录集速度较慢 (VBA)

    我有一段代码创建一个新表 然后尝试将记录集值复制到该表中 唯一的问题是它非常慢并且访问在执行下面的插入部分时显示加载符号 目前 插入 500 条记录时会出现此问题 但当我获得最终数据集时 我需要插入大约 10 000 到 20 000 条记
  • Ruby on Rails - 制作新应用程序时出错(rb:55:在“require”中)

    我一直在关注 Mike Hartl 的精彩作品Ruby on Rails 教程 我必须提前对 gem 文件和 ruby 的版本做出一些决定 我决定 在让 Heroku 工作出现一些问题之后 我会直接模仿所描述的教程和 ruby 版本 让我去
  • 将 libcutils 链接到本机可执行文件[重复]

    这个问题在这里已经有答案了 我希望我的可执行文件能够调用 libcuils 支持的函数 就像property get 在 Android mk 中我有 LOCAL LDLIBS lcutils ndk build返回 未定义的引用prope
  • Android 上的时间解析问题

    尝试解析时间字符串时出现解析异常02 22 p m 我有以下转换函数 public static long convertdatetotimestamp String datestring String newdateformat Stri
  • 在同一台计算机上连接两个本地 uwp 应用程序

    我试图让两个 uwp 应用程序 Windows 10 应用程序 在同一台计算机上运行时进行通信 应用程序已经可以进行通信当运行于不同的主机 因此代码正在运行 两个应用程序都可以在其清单文件中声明的本地和公共网络中进行通信 什么时候在同一主机
  • ReactCrop 预览未渲染

    我想为我的 Web 应用程序实现图像裁剪功能 并发现 React image crop 是实现该功能的最佳 npm 包 但是 由于某种原因 ReactCrop 组件提供的预览没有在我的视口上渲染 这是我一直使用的代码 import useS
  • 使用 JQuery 导航无根 dom

    给定这个 html 字符串 var string div div p p 我用它创建一个 jQuery 对象 var dom string 是否有机会使用选择器指向其标签之一 当然 无需将其全部嵌入到新创建的项目中 dom find p 当
  • CSS:IE7 的表格和表格单元格替换

    http jsfiddle net vByVD 9 这就是我所拥有的 在大多数浏览器中 菜单看起来都是水平的 但在 IE7 及更低版本中 当然是另一回事了 它是垂直的 我发现这是因为他们不支持表格 表格单元格 我尝试了一些技巧 正如您在 C
  • OpenSSL 1.1.0 中的 EVP_get_cipherbyname 和“未定义的结构/联合 evp_cipher_st”

    我正在尝试将 openssl 与 Visual Studio C 项目一起使用 我使用 Visual Studio nmake 命令编译 openssl 然后使用以下命令将所有内容安装到预定义文件夹 C openssl nmake inst
  • 无法在 Node.js 上使用 sqlite3 将行放入数组中

    我在 Node js 中有一段代码 它从 SQLite 数据库中选择所有内容并打印每一行 它可以工作 代码如下 var sqlite3 require sqlite3 verbose var db new sqlite3 Database
  • Braintree 中出现“请求已中止:无法创建 SSL/TLS 安全通道”错误

    在我的本地 PC Braintree 中 执行时显示错误 请求已中止 无法创建 SSL TLS 安全通道 var clientToken gateway ClientToken generate 我正在使用 Braintree 2 33 0
  • Ruby 中变量前的感叹号

    通过 ruby Monk 他们偶尔会从左侧字段中抛出一段具有不熟悉语法的代码 def compute xyz return nil unless xyz xyz map a b b nil a b a end 谁能解释一下这三种用途吗 1
  • Sequelize 不创建模型关联列

    当 Sequelize 创建关联字段时 我有点困惑 我已经使用sequelize cli 创建了我的迁移 这生成了迁移和模型文件 然后在模型文件中我填充了我的关联 然后跑了npx sequelize cli db migrate 这将创建表
  • m2e eclipse插件如何与eclipse交互?

    我是一个 Eclipse 强者 由于历史上 Maven Eclipse 集成不佳而忽略了 Maven m2e 似乎正在成熟 我正在认真试驾它 我想了解 m2e 在 eclipse 中是如何工作的 这样我就可以更好地让两者顺利地协同工作 并了
  • 根据以编程方式创建时间表更改运输车队

    在跟进我之前的问题时上一个问题 当以编程方式创建时间表时 我在主程序启动时运行该函数 参见图 1 我想基于此更改 Transporterfleet image2 时间表 但是 当我通过 initschedule 函数执行此操作时 会给出下一
  • Scikit Learn 的 Keras 包装器 - AUC 评分器不起作用

    我正在尝试使用Keras Scikit 学习包装器以便更容易地随机搜索参数 我在这里写了一个示例代码 其中 我生成一个人工数据集 我在用moons from scikit learn from sklearn datasets import
  • mysql触发器怎么写

    有两张桌子表A 如果用户使用此查询 插入 A 值 abc 1 50 那么触发器应该检查 表B 中的student name 如果student name已经存在于 表B 中 那么 更新表 B 中的 all marks 字段 例如 all m
  • Kivy - 在 .py 文件中使用一个屏幕的 TextInput 中的文本到另一个屏幕

    我的第一个屏幕上有一个 TextInput 我想在第二个屏幕上的标签中使用收到的文本 我怎样才能做到这一点 由于可能有不同的玩家 我创建了一个玩家类 它为每个玩家存储一个名字和他 她的分数 在第二个屏幕中 我还尝试创建一个可以编辑点 标签文
  • 如何从文件中读取powershell表

    我在一个文件中有这样的内容 File Versions aaa 1 0 0 123 1 0 0 124 bbb 1 0 0 123 1 0 0 124 如何在powershell中将其读入表或类型数组 我已经通过以下脚本创建了该文件 ver
  • 将 javascript 函数注入到 Iframe 中

    这个链接 存档版本 描述了如何将脚本中的代码注入到 iframe 中 function injectJS var iFrameHead window frames myiframe document getElementsByTagName