1

ビルドする次のURLがあります。

http://localhost/myweb/cart/index.php

http://localhost/myweb/ビットビルドを動的に取得したい。

http://www.myweb.com/cart/index.phpである私のライブ Web サイトでこれを行うには、次の JavaScript コードを使用できます。

var http = location.protocol;
var slashes = http.concat("//");
var host = slashes.concat(window.location.hostname);

しかし、開発環境を動作させるにはどうすればよいhttp://localhost/myweb/ですか? 上記のコードを実行すると、私http://localhost/だけが得られます。

助言がありますか?

4

1 に答える 1

3

window.location.pathnameあなたが探しているものです。

window.locationの MDN の説明を読むことをお勧めします。MDN の他のすべてと同様に、これも非常に簡単で有益です。

URL の末尾に不要な index.html 部分があることがわかっている場合は、次のことができます。

var path = window.location.pathname.split('/');
path.pop();
path.join('/');

またはスライスすることもできます(一般的には高速であるため):

path.slice(0,path.lastIndexOf('/')+1)

 


編集

あなたの新しい質問を見て、現在の URL だけでは、あなたが望むことを一貫して安全に行うことはできないと言えます。

http://localhost/myweb/アプリケーションの URL ルートである部分が必要です。JavaScript では、URL のプロトコルとドメインを取得できます。実際のサイトではこれら 2 つが一致しますが、アプリケーションがサブフォルダー ( myweblocalhost のフォルダーなど) にある場合、これは失敗します。

必要なのは、何らかの方法でアプリケーション URL (アプリケーションの URL ルート) を特定することです。

問題は、URL を調べるだけでは、JavaScript がアプリケーションの場所を特定できないことです。

サイトを次の場所にデプロイするとします。http://localhost/myweb/site1/

次の URL が表示されます。http://localhost/myweb/site1/cart/index.php

Javascript は URL をスラッシュ ( /) で分割できますが、選択するサブフォルダーの数を指定する方法がありません。たとえば、アプリケーション ルートの上の URL は、 、 、 、 のいずれかhttp://localhost/http://localhost/myweb/なりhttp://localhost/myweb/site1/ますhttp://localhost/myweb/site1/cart/

他のアプローチ (私が最初に提案した) によって、URL の末尾 (あなたの場合はそのcart/index.php部分) を削除できます。これは、URL 構造が非常に厳格な場合にのみ機能するため、このスクリプトが実行されるすべてのページが 1 つのサブフォルダーに存在します。

そのため、次の URL で壊れます:http://localhost/myweb/site1/gallery/old/index.phpなど。

あなたの最善の策は、これを別のファイルで「構成変数」にして、展開先のすべての場所で編集することです。

$appRoot = "http://localhost/myweb/"JavaScript を生成するPHP 変数 ( ) として。

または、より単純に JavaScript 変数 ( var appRoot = 'http://localhost/myweb/') です。別の js ファイルを作成し、次のように呼び出しconfig.js、上記の行を追加して、他の JavaScript の前に参照します。

于 2013-04-15T06:20:49.510 に答える