下面的代码显示了我几乎完整的页面源(没有doctype)和调用test()的行号。因为代码不包含doctype,所以当我发出警报时(代码[line])我没有得到正确的答案。
<script>
function test(what)
{
var err = new Error;
var line = err.stack.split("\n")[1].split(':')[2];
var code = document.documentElement.outerHTML.split("\n");
console.log(code);
alert(line);
}
test('hello there');
<script>
我如何进行测试(&#39; hello there&#39;);&#39;从我的测试函数作为字符串?
问题在于行号。我的行返回源文件中的正确行号,但我的代码返回具有不同编号的页面源(它错过了DOCTYPE并具有不同的换行符)。所以问题是:如何获得真实的&#34;页面来源?
答案 0 :(得分:1)
解决方案是不在整个HTML文档中,而是在右script
元素中。它有效,但在使用之前你需要一些注意事项:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JS Bin</title>
</head>
<body>
<script>
function test(what) {
var err = new Error;
console.log(err.stack.split("\n"))
var line = err.stack.split("\n")[2].split(':')[1];
var script = document.scripts[0];
var code = (script.innerText||script.textContent).split(/<br>|\n/);
console.log(line);
console.log(code, code.length);
console.log(code[+line]); // this logs "test('hello there');"
}
test('hello there');
</script>
</body>
</html>
要做的第一件事可能是给你的脚本元素一个id,而不是依赖于这个数字。
我真的不会将这样的事情分开进行一些简短的测试。
答案 1 :(得分:0)
这是一个有效但难看的解决方案。丑陋因为:
1.再次加载同一页面
2.使用async ajax
<script>
function getSource()
{
var request = new XMLHttpRequest();
request.open('GET', location.href, false);
request.send(null);
if (request.status === 200)
{
return request.responseText;
}
return '';
}
function test(what)
{
var err = new Error;
var line = err.stack.split("\n")[1].split(':')[2];
var code = getSource().split("\n");
alert(code[line-1]);
}
test('hello there');
</script>