如何从外部JavaScript文件获取函数参数
how to get function arg from external javascript file?
下面的代码在一个javascript文件中==>测试.js:
function test(){ window.open('http://example.com/abc/c4adbeb687f77b48a041d70395803358','','toolbar=yes,statusbar=yes,location=yes,menubar=yes,scrollbars=yes,resizable=no,fullscreen=yes');}
如何从具有以下结构的 HTML 文件中获取http://example.com/abc/c4adbeb687f77b48a041d70395803358
==>测试.html:
<script type="text/javascript" src="test.js"></script>
<script>
alert(window.open.value);
</script>
如果你同时控制了 HTML 和 JS,你可以截获 window.open
函数:
<script>
var oldWindowOpen = window.open;
var windowOpenArgs = [];
window.open = function() {
windowOpenArgs = arguments;
oldWindowOpen.call(window, arguments);
};
</script>
<script type="text/javascript" src="test.js"></script>
<script>
window.open = oldWindowOpen;
// do stuf with variable windowOpenArgs
console.log(windowOpenArgs[0]); //the url
</script>
您可以通过抛出和捕获错误来查找堆栈跟踪,并且仅在调用来自特定函数时记录参数,从而获得更高级,但这完全取决于脚本的性质:
window.open = function() {
try { throw new Error(); } except(e) {
var stack = e.stack;
if (/test@.*?test.js:/.test(stack)) {
windowOpenArgs = arguments;
}
}
}
但请注意,该变量只会在执行test()
后设置!
你的问题似乎有点不清楚....对我来说。
我假设您正在尝试翻录位于.js
文件中的网址。在您的示例中,您希望从 test.js
中撕下 url http://example.com/abc/c4adbeb687f77b48a041d70395803358
。
好吧,在您的示例中,您test.js
加载到脚本标记中,如下所示:
<script type="text/javascript" src="test.js"></script>
因此,如果您知道具有 url 数据的函数的名称。您可以简单地:
alert(test.toSource());
以查看其内容。但是,需要对其进行解析。人们可以为它写一个看起来很奇怪的正则表达式。但是,这里有一个解决方法:
alert("http"+test.toSource().split("http")[1].split("',")[0]);
这是一个粗略的解决方法。解析在很大程度上取决于人们如何编写代码。而且,在此示例中,如果他们使用 "
而不是 '
,则它将无法正确显示 URL。可能还有其他问题,一个漂亮的正则表达式可以干净利落地将其淘汰。
但是,如果您不知道函数名称。而且您只想盲目地在整个js
文件中搜索网址(特定或一般),那么我建议最好用XMLHttpRequest
加载它。我想你也可以使用一种HttpRequest
,从不研究它。
var sUrl = "test.js";
var httpRequest = new XMLHttpRequest();
httpRequest.open("GET",sUrl, true);
httpRequest.onreadystatechange = function() {
if (httpRequest.readyState == 4 && httpRequest.status == 200) { // ok
alert ( "http"+httpRequest.responseText.split("http")[1].split("',")[0] );
} else if ( httpRequest.readyState == 4 && httpRequest.status != 200 ) {
// failed
}
};
httpRequest.send(null);
该混乱应该显示一个警报框,其中包含来自放入sUrl
的任何 URL 的函数参数中出现的第一个 http url。
如果你想要更多...那么这意味着更多的解析。但是你可以从这里存储它来做任何事情。
但是,一旦你从javascript打开一个窗口,你就不能从打开的javascript中访问这个新窗口的内容。跨域违规(同源策略的某种扩展)。但是,您可以更改其指向的位置。而且,抓住它指向的位置,这也可能是你在这里问的。
在这种情况下,如果窗口已经打开,您可以执行此操作
var w = window.open("http:''example.com"); // some time before
alert(w.location);
但是,如果您刚刚打开它。像上面。它可能about:blank
,因为它尚未加载。在这种情况下,您将不得不稍后寻找它。喜欢:
window.open("http:''example.com", "MyName");
setTimeout('var w = window.open(,"MyName"); alert(w.location);', 1000);
在这里,您必须使用窗口名称参数进行window.open
。然后,第二次调用 window.open
时,您将 URL 参数留空,仅使用窗口名称参数获取对现有打开窗口的引用......而不是打开一个新的。
然后,如果你想无处不在地抓取所有传递给window.open
的网址,有一种劫持方法。这一切都取决于你在这里问什么...但克罗尔坦打败了我!哈哈!所以检查他的答案。
铂
- Javascript:如何获取函数.apply()的键
- 如何在 JavaScript 中获取函数体文本
- 从函数内部获取函数的名称
- 从字符串的 JS 函数中获取函数参数
- 获取函数中按钮的名称
- 在其参数中获取函数本身
- 如何获取函数元素中的值
- 获取函数原型的源代码
- javascript:获取函数's变量's在另一个函数中的值
- 无法获取函数的ajax回调
- Javascript通过名称获取函数
- 如何获取函数参数值
- 使用Rhino从已评估的JS中获取函数名及其参数
- 获取函数jQuery设置的属性
- 获取函数的arity
- AJAX请求在jQuery中获取函数,变量问题
- 获取函数的表单隐藏变量
- 如何从外部JavaScript文件获取函数参数
- 不要在 Codeigniter 中获取函数参数
- 客户端 JavaScript 从服务器端文档集和获取函数接收过时的值