当我输出window.location.search时,它会显示如下结果:
?x = 0.8690746387001127或任何其他数字
但实际上应该是
?文件名= tryjsref_loc_search
有人可以解释为什么会这样做吗?
这是我的示例代码
// page url:http://w3schools.com/jsref/tryit.asp?filename=tryjsref_loc_host
<!DOCTYPE html>
<html>
<body>
<script>
document.write(window.location.search)
</script>
</body>
</html>
代码输出
?x = 0.8690746387001127
答案 0 :(得分:2)
首先,w3schools is not a good website to learn from。我建议使用jqFundamentals(“javascript基础”部分)
话虽如此,window.location.search
为您提供了窗口的当前查询字符串。对于w3school的“试用”网站,这似乎是Math.rand()
,通常用作cachebuster技术。
如果您在点击“提交”按钮时运行了小提琴手(或任何其他网络流量监控器),您会看到完整的网址为http://w3schools.com/jsref/tryit_view.asp?x=0.42147885356098413
。
MDN是javascript文档的绝佳来源,他们在window.location.search
上的输入说:
搜索| URL后面的部分是?符号,包括?符号。 | Q = devmo
答案 1 :(得分:1)
我认为你对HTML和HTTP不是很熟悉,并且你正在学习,因此没有调查页面的源代码来找出发生了什么。
那完全可以。
以下是该页面源代码的简化版本:
<form id="tryitform" name="tryitform"
action="tryit_view.asp" method="post"
target="view"
onsubmit="validateForm();">
Source Code: <input type="button" value="Submit Code »"
onclick="submitTryit()">
Result: <textarea id="pre_code">
<!-- Your source code goes here -->
</textarea>
<input type="hidden" id="code" name="code" />
<input type="hidden" id="bt" name="bt" />
<iframe id="viewIFRAME" name="view"
src="tryit_view.asp?filename=tryjsref_loc_host">
</iframe>
</form>
<script type="text/javascript">
// This Script is called when you press the "Submit Code" button
function submitTryit()
{
// I'll omit the code, but what it does is this:
// 1. Take the text (your code) in the 'pre_code' textarea
// and substitute '=' with 'w3equalsign'
// and 'script' with 'w3scrw3ipttag'.
// 2. Put the modified text in the 'code' hidden input field
// 3. Change the form's action to "tryit_view.asp?x=" + a random number
// 4. Call validateForm(), which basically
// only checks if the code doesn't exceed 5000 characters
// 5. Submit form
}
window.onload = function(){ submitTryit() }
// Call submitTryit() when the page first loads
// so the view is filled also when you first arrive.
</script>
这里要理解的关键想法是,您编写的代码位于action
属性设置为“tryit_view.asp?x =”+随机数和target
的表单上属性设置为“查看”。表单上的此target
属性表示表单提交的结果应显示在iframe上,其中属性name
设置为“查看”。
所以你看,问题是你的代码实际上并没在你在浏览器上看到的页面上运行。它实际上是通过POST发送到服务器的 然后,服务器使用不同的页面进行响应,该页面将填充iframe的内容。
iframe基本上是一个嵌入主页内的“矩形迷你浏览器”,它有一个不同的URL,与主页的URL无关,也不会出现在地址栏上。此URL是表单操作的URL。
现在可能是服务器响应POST所做的只是创建一个包含您提交的代码的HTML页面,然后恢复上面那些奇怪的文本替换。
因此,您的代码最终会在iframe内运行。
因此,当您撰写window.location
或location
时,您的代码最终会真正访问iframe的位置,而不是主页的位置。
您可以像这样访问父页面的位置:
// 'parent', same as 'window.parent', refers to
// the frame which is the parent of the frame where
// this code is being run (the iframe named 'view').
document.write( parent.location.search );
或者像这样:
// "top" is the frame at the top of the frame hierarchy
document.write( top.location.search );
祝你好运!