2012-12-12 12 views
8

を使用していないされた後にHTMLでBASEを取得:それが設定されますが、HTMLページが構築されたときにベースを動的にPHPに設定されているページのURL

$base_line = '<base href="' . $some_path . '/" /> '; 
echo $base_line; 

今、私はHTMLページにいることを私がする必要がありますこの情報($ some_path)にアクセスし、数時間の検索の後に私は答えが見つからないようです。ロードされたHTMLページには、ベースと関係のないURLがあり、PHPコードを変更するためのアクセス権がありません。ロードされたページにはhttp://xyz.com/index.phpのようなURLがある可能性がありますが、ページ内の他のすべてのリンクはベースによって設定された値に基づいているため、ページURLを使用してベースを取得できません。

私は画像のような要素の1つをつかんで基底を見つけるためにDOMを使って解剖することができますが、これを行う簡単な方法があるはずです。何か案は?

window.locationを使用すると、ロードされたページURLに関連するものが返され、その中にベースとして設定されているものは返されないため、この状況では機能しません。

+0

'document.getElementsByTagName( 'base')'を試しましたか?いずれにせよ、 'BASE'はあなたが避けようとすべきものです。それは、BASEと非BASEの両方の場所からJSを2回ロードしようとすることを含め、さまざまなブラウザで奇妙な効果があります。 –

答えて

21

あなたは基本要素の値を取得したい場合は、あなたが何かを行うことができます:あなたはjqLit​​e(angularjsのデフォルト)を使用している場合

var bases = document.getElementsByTagName('base'); 
var baseHref = null; 

if (bases.length > 0) { 
    baseHref = bases[0].href; 
} 
+0

これはトリックでした。ありがとうございました! – Rasul

+0

私は ''のように ''にIDを割り当て、次に 'document.getElementById( 'myBase').href'を割り当てます。 – Blaise

+0

@Blaiseなぜあなたは余分なHTMLを追加しますか? – samanime

0

あなたがPHP

へのアクセス権を持っていない場合は、これらの3つの事より

http://www.example.com/blahblah/blah.html 

のような何かをしたい場合は、

window.location.protocol = "http" 
window.location.host = "example.com" 
window.location.pathname = "blahblah/blah.html" 

var url = window.location.protocol + "://" + window.location.host + "/" + window.location.pathname; 

アクションで来るのjavascript window.location.hostnameを使用して試すことができますこのarticleをベースURL機能として見ることができます

+0

私はBASEが何であるか教えてくれない。 –

+0

@Alienでは、ページのベースがベースに設定されていないものを返します。 – Rasul

+0

@Rasulベースドメインが必要ですか? –

0

var baseHref = document.getElementsByTagName('base')[0].href 

それとも少し安全であるとし詳細はangular documentを参照してください

base = angular.element(document.querySelector('base')).attr('href') 

:、コードは次のようになります。

+0

しかし、提供されるソリューションは、そのような単純な作業に必要な角度よりも優れているhttp://vanilla-js.com/を使用しています。あなたがあなたのアプリで角度を使っていても、全てのvanilla-jsソリューションのように、このソリューションはうまくいきます:) –

+0

角度を使用するとより簡潔になります: 'base = $ document.find( 'base')。attr( 'href' ) ' –

5

jquery、jqlite、または廃止されたAPIは不要です。新しいquerySelector APIを使用してください:私はに走った

var base = document.querySelector('base'); 
var baseUrl = base && base.href || ''; 
+1

いくつかの説明を追加できますか? –

+0

@AdrianCidAlmaguerこのhttps://caniuse.com/#search=querySelectorを参照してください。 – m1ld

2

1つの問題は、element.hrefを使用して設定されている正確に何を返さないということです。たとえば、あなたがこの持っている場合:

<base href="/some/sub/directory/" /> 

を次にelement.hrefはあなたを与える:

document.getElementsByTagName('base')[0].href 
# http://example.com/some/sub/directory/ 

を私はあなたがjQueryのattr機能を使って、これを避けることが分かっ:

$("base").attr("href") 
# /some/sub/directory/ 

の場合jQueryを避けたい場合は、getAttribute関数を使用することもできます:

document.getElementsByTagName('base')[0].getAttribute("href") 
# /some/sub/directory/ 
関連する問題