2

window.location.searchを出力すると、次のような結果が表示されます。

?x=0.8690746387001127またはその他の番号

しかし実際にはそれは次のようなものでなければなりません

?filename = tryjsref_loc_search

なぜそれがこれをしているのか誰かが説明できますか?

これが私のサンプルコードです

//ページの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

4

2 に答える 2

2

まず第一に、w3schools は学習に適した Web サイトではありません代わりにjqFundamentalsをお勧めします(「javascriptの基本」セクション)

そうは言ってもwindow.location.search、ウィンドウの現在のクエリ文字列が得られます。w3school の「Try It」サイトの場合、Math.rand()これは通常、キャッシュバスター手法として使用されているようです

[送信] ボタンをクリックしたときにフィドラー (またはその他のネットワーク トラフィック モニター) が実行されている場合は、完全な URL がhttp://w3schools.com/jsref/tryit_view.asp?x=0.42147885356098413.

MDN は JavaScript ドキュメントの優れたソースであり、次のように記載されていwindow.location.searchます。

検索 | ? に続く URL の部分 ? を含む記号 シンボル。| | ?q=devmo

于 2012-10-19T20:03:46.653 に答える
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 &raquo;"
                        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属性が "view" に設定されているフォームにコードを記述することです。フォームのこのtarget属性は、フォームの送信の結果がiframeに表示され、属性nameが「view」に設定されていることを意味します。

おわかりのように、問題は、ブラウザに表示されているページでコードが実際に実行されていないことです。実際には、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 );

あなたの学習に頑張ってください!

于 2012-10-19T21:06:15.230 に答える