我有一个内联脚本,例如inline.html
和一个不是内联的库library.js
。
我在内联脚本中调用library.method()
,在此方法中,我需要知道从哪个内联脚本中调用了该方法。
library.method = function() {
document.currentScript;
};
当然提供了库的脚本元素。
但是我需要调用脚本的script元素:例如document.invokingScript
。 (我知道,这不存在。)
还有什么可以做的吗?
出于可读性原因,我不想在嵌入式脚本中执行library.method(document.currentScript)
。
答案 0 :(得分:0)
如果您可以保证仅从函数内部调用library.method
,并且该包装函数在每个内联脚本中将具有不同的名称-那么您可以使用以下代码段(摘自{{ 3}})
var stackTrace = (new Error()).stack; // Only tested in latest FF and Chrome
var callerName = stackTrace.replace(/^Error\s+/, ''); // Sanitize Chrome
callerName = callerName.split("\n")[1]; // 1st item is this, 2nd item is caller
callerName = callerName.replace(/^\s+at Object./, ''); // Sanitize Chrome
callerName = callerName.replace(/ \(.+\)$/, ''); // Sanitize Chrome
callerName = callerName.replace(/\@.+/, ''); // Sanitize Firefox