我得到了一些 JS 代码,它们进入了一个随机的匿名 js 函数。
我希望该代码(例如 alert('hello')
)转储/警报
它被注入(inject)的整个脚本 block /对象。
有点像 document.body.innerHTML 但用于匿名函数 block
结果应该是这样的:
Function()({ somecode; MyAlert(...) } )()
或
Try { some code; mycode; } catch(e) { }
最佳答案
注意你的条件。 “(浏览器)脚本 block ”字面意思是脚本元素的代码 by the spec . 使用“javascript block ”或“javascript 对象”表示 block 或 object . 不要创建令人困惑的新术语;阅读和研究。
block 不是对象;它们是语言陈述。 就像你不能“获取当前行的代码/变量”一样,你不能“获取当前 block 的代码/变量”,试 block 与否。
退后一步,现在您可以使用
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.
将来可能会删除 Function.caller,例如
arguments.caller
. (都是麻烦,如果调用栈上的跨源函数包含api私钥代码怎么办?js引擎怎么处理inline你的代码?)当时机成熟时,或者当调用者为空(当它是全局代码时),您仍然可以获得文本堆栈跟踪 (
new Error().stack
) 和当前脚本元素 (document.currentScript
),但它们的功能非常有限。您可以通过其 textContent 或 innerHTML 属性获取脚本元素的代码(如果有的话)。
你的问题听起来像 XY Problem .你想做一些现代语言不应该做的事情,但永远不会说出什么目的。 尝试描述您真正的问题。
关于javascript - 匿名函数javascript,如何访问源代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12905671/