web-dev-qa-db-ja.com

設定後にHTMLでBASEを取得しますが、ページURLは使用しません

ベースは、HTMLページが作成されるときにphpで動的に設定されます。

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

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

画像のような要素の1つを取得し、DOMを使用してそれを分析してベースを見つけることができると思いますが、これを行うためのより簡単な方法があるはずです。何か案は?

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

13
Rasul

基本要素の値を取得する場合は、次のようにすることができます。

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

またはもう少し安全にするために:

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

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

更新:より簡潔な方法は次のようになります:

_const baseHref = (document.getElementsByTagName('base')[0] || {}).href;
_

_<base>_がない場合、baseHrefはnullになる可能性があります。


更新2:getElementsByTagName()を使用する代わりに、querySelector()を使用します。

_var base = (document.querySelector('base') || {}).href;
console.log(base);_
_<base href="http://www.google.com"/>_
32
samanime

Jquery、jqlite、または廃止されたAPIは必要ありません。新しいquerySelectorAPIを使用します。

var base = document.querySelector('base');
var baseUrl = base && base.href || '';
6
Nelo Mitranim

私が遭遇した問題の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/
3
jchavannes

PHPにアクセスできない場合は、javascript window.location.hostnameを使用してみてください。

あなたがのようなものが欲しいなら

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

これらの3つのことが実行に移されるより

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;

あなたはこれを見ることができます 記事 ベースURL関数について

0
Mr. Alien

すべてのNodeには読み取り専用プロパティ baseURI があり、絶対ベースURLを返すか、絶対URIを取得できない場合はnullを返します。

ドキュメントのベースURLを取得するには、次を使用できます。document.baseURI

パス名またはURLの他の部分のみが必要な場合は、 [〜#〜] url [〜#〜] オブジェクトを作成できます。

var baseLocation = new URL(document.baseURI);
var pathname = baseLocation.pathname;
0
jorgecasar

JqLit​​e(angularjsのデフォルト)を使用している場合、コードは次のようになります。

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

詳細については、 角度ドキュメント を参照してください。

0
hao