gpt4 book ai didi

javascript - 确定哪个框架(名称)调用了 JavaScript 中的函数

转载 作者:行者123 更新时间:2023-11-29 18:34:50 24 4
gpt4 key购买 nike

在这个问题之前,让我先说明一下我正在从事一个非常不典型的项目。我不关心安全或跨浏览器的影响。我正在使用 Chromium 项目的自定义构建。

我的问题是,如果我从不同的命名空间调用函数,我如何确定原始命名空间?

例如,假设我有三个框架:

1. window
-> 2. frame1 //is a child of window
-> 3. frame2 //is a child of window

现在,假设 window 中的一些 JavaScript 有一个名为 doStuff() 的函数,我将其指定为 frame1frame2 访问方式:

var localDoStuff = top.doStuff;

在函数 doStuff 中,有没有办法确定 frame1frame2 调用了它?即:如果我在 frame1 范围内调用 localDoStuff,我能否在 doStuff 范围内获取 frame1 的 DOM 窗口对象?

如果我使用 arguments.callee.caller,它会给我调用它的函数的字符串表示形式。但是,我想获取定义该函数的范围

确实可以访问浏览器的源代码,如果有人对如何修改浏览器有明确的、有针对性的想法以允许这样做的话。

从评论中粘贴:我基本上是在模拟一个运行多个应用程序的操作系统。这些应用程序中的每一个都是一个 iframe,可以访问在应用程序的父框架中定义的 API。假设此 API 具有函数 requestFocus()——不允许参数,正如我正在实现的 API 规范中所定义的那样。为了提供正确的 iframe 焦点,我必须知道哪个 iframe 调用了 requestFocus 函数。我知道这不是一个理想的情况——不幸的是,我没有编写 API 规范……

感谢您的帮助,我知道这是一个非常奇怪的问题。

最佳答案

由于不同的框架有不同的Function构造函数,你可以这样检测:

function doStuff() {
if (doStuff.caller instanceof Function) {
// called from top
} else if (doStuff.caller instanceof frame1.contentWindow.Function) {
// called from frame1
} ...
}

但是,如果函数是从顶层代码调用的,这将不起作用,在这种情况下 doStuff.caller === null

我真的很想知道是否有人对此有解决方案。

关于javascript - 确定哪个框架(名称)调用了 JavaScript 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4251772/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com