javascript - 匿名函数javascript,如何访问源代码?

标签 javascript

我得到了一些 JS 代码,它们进入了一个随机的匿名 js 函数。 我希望该代码(例如 alert('hello') )转储/警报 它被注入(inject)的整个脚本 block /对象。

有点像 document.body.innerHTML 但用于匿名函数 block

结果应该是这样的:

Function()({ somecode; MyAlert(...) } )()

Try { some code; mycode; } catch(e) { }

最佳答案

  1. 注意你的条件。 “(浏览器)脚本 block ”字面意思是脚本元素的代码 by the spec . 使用“javascript block ”“javascript 对象”表示 block object . 不要创建令人困惑的新术语;阅读和研究。

  2. block 不是对象;它们是语言陈述。 就像你不能“获取当前行的代码/变量”一样,你不能“获取当前 block 的代码/变量”,试 block 与否。

  3. 退后一步,现在您可以使用Function.caller获取调用您的代码的函数:

var mycode = function me(){ if ( me.caller ) alert( me.caller.toString() ); };
(function(){ var some = 'code'; mycode(); })();
// Alert "function(){ var some = 'code'; mycode(); }", even when it is anonymous

Note that you get the whole function's code, not the function block's code which excludes parameters and function name.

  1. 将来可能会删除 Function.caller,例如 arguments.caller . (都是麻烦,如果调用栈上的跨源函数包含api私钥代码怎么办?js引擎怎么处理inline你的代码?)

    当时机成熟时,或者当调用者为空(当它是全局代码时),您仍然可以获得文本堆栈跟踪 ( new Error().stack ) 和当前脚本元素 ( document.currentScript ),但它们的功能非常有限。

    您可以通过其 textContent 或 innerHTML 属性获取脚本元素的代码(如果有的话)。

  2. 你的问题听起来像 XY Problem .你想做一些现代语言不应该做的事情,但永远不会说出什么目的。 尝试描述您真正的问题。

关于javascript - 匿名函数javascript,如何访问源代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12905671/

相关文章:

javascript - "Error watching file for changes: EMFILE"当初始化一个 react-native 项目时

javascript - 执行 JavaScript 正则表达式替换时如何转义捕获组 $N 后跟整数?

javascript - 在 PHP 中将文件名列表转换为文件树?

javascript - 有没有办法在 WebCrypto API 中获取 RSA key 的组成部分?

javascript - jQuery Cycle - 未加载 img 幻灯片,正在重新排队幻灯片

javascript - 我将如何制作一个导航系统,为同一位置的每个项目不同的导航项目显示不同的表单?

javascript - 如何添加到特定索引处的 JavaScript 计算

javascript - 匀场后如何从我的模块引用 PreloadJS?

javascript - Emscripten 将 C++ 编译为 JavaScript 和 Asm.js 的错误结果

javascript - MongoDB - 查询数组的最后一个对象?