divをheadとdisplay:noneに入れた場合、JavaScriptを使用して表示した場合、これは機能しますか?
編集:
AJAXに読み込まれたものがあります。また、私のAJAXがサイトの「メイン」の部分を変更するので、メタタグも変更したいと考えています。
divをheadとdisplay:noneに入れた場合、JavaScriptを使用して表示した場合、これは機能しますか?
編集:
AJAXに読み込まれたものがあります。また、私のAJAXがサイトの「メイン」の部分を変更するので、メタタグも変更したいと考えています。
回答:
はい、できます。
いくつかの興味深いユースケースがあります:一部のブラウザとプラグインはメタ要素を解析し、異なる値に応じてそれらの動作を変更します。
<meta name="SKYPE_TOOLBAR" content="SKYPE_TOOLBAR_PARSER_COMPATIBLE">
<meta name="format-detection" content="telephone=no">
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
これはJavaScriptで変更できます。参照:iPhoneビューポートスケールのバグの修正
一部のユーザーエージェント(たとえば、Opera)は、ブックマークの説明を使用します。ここにパーソナライズされたコンテンツを追加できます。例:
<!DOCTYPE html>
<title>Test</title>
<meta name="description" content="this is old">
<script type='text/javascript' src='http://code.jquery.com/jquery-1.8.2.js'></script>
<button>Change description</button>
<script type='text/javascript'>
$('button').on('click', function() {
// Just replacing the value of the 'content' attribute will not work.
$('meta[name=description]').remove();
$('head').append( '<meta name="description" content="this is new">' );
});
</script>
つまり、検索エンジンだけではありません。
keywords
とをはるかに超えていdescription
ます。
document.write
はヘッダーでしかできないと思いますが、Skypeが既にDOMを壊してしまっているので、ページが読み込まれてから変更するのは遅すぎます。
$('meta[property="og:title"]').replaceWith('<meta property="og:title" content="New Title">');
const meta = document.querySelector('meta[name=theme-color]'); meta.setAttribute("content", colors[slideIndex]);
Android上のChromeが更新を検出して色を変更します
はい、そうです。
たとえば、メタ説明を設定するには:
document.querySelector('meta[name="description"]').setAttribute("content", _desc);
property
属性ではなく属性を照会する必要があるようですname
。つまり、meta[property="og:title"]
あなたは(jQueryで)のようなものを使うでしょう:
$('meta[name=author]').attr('content', 'New Author Name');
ただし、通常はJavaScriptを実行せずにドキュメントが読み込まれたときにのみメタタグがスクレイピングされるため、これはほとんど無意味です。
$('meta[property=og:somestuff]')
コロンのせいでjQuery選択構文と衝突するのではないかと私は思ったようなセレクターでも動作します。
たとえば、次のようなjQuery呼び出しでメタを変更できます。
$('meta[name=keywords]').attr('content', new_keywords);
$('meta[name=description]').attr('content', new_description);
google は ajaxコンテンツをとを介してインデックスに登録すると言っているので、今のところ問題はないと思います。そして今、彼らはそれを検証することができます(ヘッドレスブラウザーでも自動的に、上記のページの「HTMLスナップショットを作成する」リンクを参照してください)。#!hashes
_escaped_fragment_
Javascriptを使用してページのメタタグを変更することは間違いなく可能です。これはJavaScriptのみのアプローチです:
document.getElementsByTagName('meta')["keywords"].content = "My new page keywords!!";
document.getElementsByTagName('meta')["description"].content = "My new page description!!";
document.title = "My new Document Title!!";
上記のコードに対して、Googleがこれらのクライアント側の変更をインデックスに登録することを確認しました。
element = collection[name]
構文を知ってくれてありがとう。
メタタグはdomの一部であり、アクセスおよび変更できますが、検索エンジン(メタタグの主な利用者)は、JavaScriptが実行されないため、変更を認識しません。したがって、ブラウザに影響を与えるメタタグ(更新が頭に浮かぶ)を変更しない限り、これはほとんど役に立ちませんか?
次のようにすることができます(またはjQueryのように使用します$('meta[name=author]').attr("content");
)。
<html>
<head>
<title>Meta Data</title>
<meta name="Author" content="Martin Webb">
<meta name="Author" content="A.N. Other">
<meta name="Description" content="A sample html file for extracting meta data">
<meta name="Keywords" content="JavaScript, DOM, W3C">
</head>
<body>
<script language="JavaScript"><!--
if (document.getElementsByName) {
var metaArray = document.getElementsByName('Author');
for (var i=0; i<metaArray.length; i++) {
document.write(metaArray[i].content + '<br>');
}
var metaArray = document.getElementsByName('Description');
for (var i=0; i<metaArray.length; i++) {
document.write(metaArray[i].content + '<br>');
}
var metaArray = document.getElementsByName('Keywords');
for (var i=0; i<metaArray.length; i++) {
document.write(metaArray[i].content + '<br>');
}
}
//--></script>
</body>
</html>
$(document).ready(function() {
$('meta[property="og:title"]').remove();
$('meta[property="og:description"]').remove();
$('meta[property="og:url"]').remove();
$("head").append('<meta property="og:title" content="blubb1">');
$("head").append('<meta property="og:description" content="blubb2">');
$("head").append('<meta property="og:url" content="blubb3">');
});
jQuery('meta[property="og:title"]').attr('content', "blubb1");
var metaTag = document.getElementsByTagName('meta');
for (var i=0; i < metaTag.length; i++) {
if (metaTag[i].getAttribute("http-equiv")=='refresh')
metaTag[i].content = '666';
if (metaTag[i].getAttribute("name")=='Keywords')
metaTag[i].content = 'js, solver';
}
よりシンプルで軽量なソリューションを使用できます。
document.head.querySelector('meta[name="description"]').content = _desc
各メタタグの例への単純な追加およびdiv属性
<meta id="mtlink" name="url" content="">
<meta id="mtdesc" name="description" content="" />
<meta id="mtkwrds" name="keywords" content="" />
今、元の通常のdivの変更のように。nクリック
<a href="#" onClick="changeTags(); return false;">Change Meta Tags</a>
jQueryによる関数変更タグ
function changeTags(){
$("#mtlink").attr("content","http://albup.com");
$("#mtdesc").attr("content","music all the time");
$("#mtkwrds").attr("content","mp3, download music, ");
}
いいえ、divはbody要素であり、head要素ではありません
編集:SEが取得するのはベースHTMLのみであり、ajaxで変更されたHTMLではありません。
はい、Javascriptでメタタグを追加することは可能です。私の例では
しかし、私はそれを他に変更してから削除する方法がわかりません。ところで、私の例では、「追加」ボタンをクリックすると、タグが追加され、ビューポートがそれぞれ変更されますが、元に戻す方法がわかりません(Androidでは削除します)。Android用のFirebugがあったらいいので、私は何が起こっているのかを見ました。Firefoxはタグを削除します。誰かがこれについて何か考えを持っているなら、私の質問にそのように注意してください。
これを索引に入れてください
<link rel="opengraph" href="{http://yourPage.com/subdomain.php}"/>
これをajaxfiles og:type "og:title" og:descriptionとog:imageに入れます
これも追加します
<link rel="origin" href={http://yourPage.com}/>
次に、ajaxCallの後にjsを追加します
FB.XFBML.parse();
編集:正しいタイトルと画像をtxt / php doumentsでfacebookに表示できます(私は拡張子として.phpという名前ですが、より多くのtxtファイルです)。次に、これらのファイルにメタタグを付け、すべてのドキュメントのインデックスに戻るリンクと、すべてのサブファイルのインデックスファイルにメタリンクを付けます。
誰かがこれを行うより良い方法を知っているなら、私は追加を感謝します:)
これは、ほとんど幾何学的に設定されていないアプリで、モバイルと他のブラウザーの両方でほとんど変更なしで実行する必要があるため、モバイル/非モバイルブラウザーのステータスを検索し、モバイルでビューポートをデバイス幅に設定する必要があります。ヘッダーからスクリプトを実行できるため、ヘッダー内の以下のjsは、ページがロードされる前にデバイス幅のメタタグを変更するようです。navigator.userAgentの使用は実験的なものとして規定されていることに注意してください。スクリプトは、変更するメタタグエントリに従う必要があるため、最初のコンテンツを選択してから、何らかの条件で変更する必要があります。
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script>
var userAgentHeader = navigator.userAgent ;
var browserIsMobileOrNot = "mobileNOT" ;
if( userAgentHeader.includes( "Mobi" ) ) {
browserIsMobileOrNot = "mobileYES" ;
//document.querySelector('meta[name="viewport"]').setAttribute( "content", "width=device-width, initial-scale=1.0" );
} else {
browserIsMobileOrNot = "mobileNOT" ;
document.querySelector('meta[name="viewport"]').setAttribute( "content", "");
}
</script>
<link rel="stylesheet" href="css/index.css">
。。。。。。