As informações necessárias estão em uma metatag. Como posso acessar os "content"
dados da metatag quando property="video"
?
HTML:
<meta property="video" content="http://video.com/video33353.mp4" />
As informações necessárias estão em uma metatag. Como posso acessar os "content"
dados da metatag quando property="video"
?
HTML:
<meta property="video" content="http://video.com/video33353.mp4" />
Respostas:
Você pode usar isto:
function getMeta(metaName) {
const metas = document.getElementsByTagName('meta');
for (let i = 0; i < metas.length; i++) {
if (metas[i].getAttribute('name') === metaName) {
return metas[i].getAttribute('content');
}
}
return '';
}
console.log(getMeta('video'));
document.querySelector("meta[property='og:url']").getAttribute('content')
const
/ let
deve suportar .querySelector
!
As outras respostas provavelmente devem funcionar, mas essa é mais simples e não requer jQuery:
document.head.querySelector("[property~=video][content]").content;
A pergunta original usava uma tag RDFa com um property=""
atributo. Para as <meta name="" …>
tags HTML normais, você pode usar algo como:
document.querySelector('meta[name="description"]').content
document.head.querySelector
me deu null
, mas document.querySelector
funcionou perfeitamente
[content]
no seletor estende essa exceção ao caso em que qualquer tag correspondente não possui um atributo de conteúdo. Na IMO, nesse caso, faz mais sentido obter um resultado nulo, mas acho que depende da preferência do implementador.
Existe uma maneira mais fácil:
document.getElementsByName('name of metatag')[0].getAttribute('content')
document.querySelector
versão funciona todo o caminho para o IE8, por isso é muito
function getMetaContentByName(name,content){
var content = (content==null)?'content':content;
return document.querySelector("meta[name='"+name+"']").getAttribute(content);
}
Usado desta maneira:
getMetaContentByName("video");
O exemplo nesta página:
getMetaContentByName("twitter:domain");
type error
como undefined
porque a própria metatag estava faltando. Resolvi isso atribuindo uma variável e envolvendo a document.queryselector
instrução try para que eu pudesse obter ""
por padrão em caso de erro.
Se você usa JQuery, pode usar:
$("meta[property='video']").attr('content');
No Jquery, você pode conseguir isso com:
$("meta[property='video']");
Em JavaScript, você pode conseguir isso com:
document.getElementsByTagName('meta').item(property='video');
document.getElementsByTagName('meta')['video'].getAttribute('content');
se a marcação for a seguinte:<meta name="video" content="http://video.com/video33353.mp4" />
Caminho - [ 1 ]
function getMetaContent(property, name){
return document.head.querySelector("["+property+"="+name+"]").content;
}
console.log(getMetaContent('name', 'csrf-token'));
Você pode receber um erro: TypeError não capturado: Não é possível ler a propriedade 'getAttribute' nula
Caminho - [ 2 ]
function getMetaContent(name){
return document.getElementsByTagName('meta')[name].getAttribute("content");
}
console.log(getMetaContent('csrf-token'));
Você pode receber um erro: TypeError não capturado: Não é possível ler a propriedade 'getAttribute' nula
Caminho - [ 3 ]
function getMetaContent(name){
name = document.getElementsByTagName('meta')[name];
if(name != undefined){
name = name.getAttribute("content");
if(name != undefined){
return name;
}
}
return null;
}
console.log(getMetaContent('csrf-token'));
Em vez de obter erro, você recebe null
, isso é bom.
Simples, certo?
document.head.querySelector("meta[property=video]").content
Este código funciona para mim
<meta name="text" property="text" content="This is text" />
<meta name="video" property="text" content="http://video.com/video33353.mp4" />
JS
var x = document.getElementsByTagName("META");
var txt = "";
var i;
for (i = 0; i < x.length; i++) {
if (x[i].name=="video")
{
alert(x[i].content);
}
}
Exemplo de violino: http://jsfiddle.net/muthupandiant/ogfLwdwt/
function getDescription() {
var info = document.getElementsByTagName('meta');
return [].filter.call(info, function (val) {
if(val.name === 'description') return val;
})[0].content;
}
Versão atualizada:
function getDesc() {
var desc = document.head.querySelector('meta[name=description]');
return desc ? desc.content : undefined;
}
Aqui está uma função que retornará o conteúdo de qualquer metatag e memorizará o resultado, evitando consultas desnecessárias ao DOM.
var getMetaContent = (function(){
var metas = {};
var metaGetter = function(metaName){
var theMetaContent, wasDOMQueried = true;;
if (metas[metaName]) {
theMetaContent = metas[metaName];
wasDOMQueried = false;
}
else {
Array.prototype.forEach.call(document.getElementsByTagName("meta"), function(el) {
if (el.name === metaName) theMetaContent = el.content;
metas[metaName] = theMetaContent;
});
}
console.log("Q:wasDOMQueried? A:" + wasDOMQueried);
return theMetaContent;
}
return metaGetter;
})();
getMetaContent("description"); /* getMetaContent console.logs the content of the description metatag. If invoked a second time it confirms that the DOM was only queried once */
E aqui está uma versão estendida que também consulta tags de gráfico aberto e usa a Matriz # some :
var getMetaContent = (function(){
var metas = {};
var metaGetter = function(metaName){
wasDOMQueried = true;
if (metas[metaName]) {
wasDOMQueried = false;
}
else {
Array.prototype.some.call(document.getElementsByTagName("meta"), function(el) {
if(el.name === metaName){
metas[metaName] = el.content;
return true;
}
if(el.getAttribute("property") === metaName){
metas[metaName] = el.content;
return true;
}
else{
metas[metaName] = "meta tag not found";
}
});
}
console.info("Q:wasDOMQueried? A:" + wasDOMQueried);
console.info(metas);
return metas[metaName];
}
return metaGetter;
})();
getMetaContent("video"); // "http://video.com/video33353.mp4"
Minha variante da função:
const getMetaValue = (name) => {
const element = document.querySelector(`meta[name="${name}"]`)
return element?.getAttribute('content')
}
Pessoalmente, prefiro colocá-los em um objeto hash, para acessá-los em qualquer lugar. Isso pode ser facilmente configurado como uma variável injetável e, em seguida, tudo pode ter, e ele é capturado apenas uma vez.
Ao envolver a função, isso também pode ser feito como um liner.
var meta = (function () {
var m = document.querySelectorAll("meta"), r = {};
for (var i = 0; i < m.length; i += 1) {
r[m[i].getAttribute("name")] = m[i].getAttribute("content")
}
return r;
})();
Para sua informação, de acordo com https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta, os atributos globais são válidos, o que significa que o id
atributo pode ser usadogetElementById
.
<html>
<head>
<meta property="video" content="http://video.com/video33353.mp4" />
<meta name="video" content="http://video.com/video33353.mp4" />
</head>
<body>
<script>
var meta = document.getElementsByTagName("meta");
size = meta.length;
for(var i=0; i<size; i++) {
if (meta[i].getAttribute("property") === "video") {
alert(meta[i].getAttribute("content"));
}
}
meta = document.getElementsByTagName("meta")["video"].getAttribute("content");
alert(meta);
</script>
</body>
</html>
Se você estiver interessado em uma solução mais abrangente para obter todas as metatags, poderá usar este trecho de código
function getAllMetas() {
var metas = document.getElementsByTagName('meta');
var summary = [];
Array.from(metas)
.forEach((meta) => {
var tempsum = {};
var attributes = meta.getAttributeNames();
attributes.forEach(function(attribute) {
tempsum[attribute] = meta.getAttribute(attribute);
});
summary.push(tempsum);
});
return summary;
}
// usage
console.log(getAllMetas());
se a meta tag for:
<meta name="url" content="www.google.com" />
O JQuery será:
const url = $('meta[name="url"]').attr('content'); // url = 'www.google.com'
O JavaScript será: (Ele retornará HTML inteiro)
const metaHtml = document.getElementsByTagName('meta').url // metaHtml = '<meta name="url" content="www.google.com" />'
<meta>
é suposto ter umname
atributo, nãoproperty
. Os desenvolvedores que usam o atributo padrão precisarão adaptar o código fornecido pela maioria das respostas.