[thelist] Adding META tag via the DOM if not already present (Javascript)

Ken Snyder kendsnyder at gmail.com
Tue Jan 29 09:56:40 CST 2008


Dave Stevens wrote:
> Hi all,
>
> I am attempting to add two meta tags, required by the company's chosen 
> Metrics solution, to the head of a page if they are not already present. 
> I'm trying to do this through javascript and I've come across some 
> difficulties.
> ...
> My first problem is that that bit of code is horrendous. However, 
> Firefox gives me a "getAttribute is not a function" if I use 
> metaTags[i].getAttribute("name") and will only respond to 
> metaTags[i].attributes[1].nodeValue - though I found that Peter Paul 
> Koch's quirksmode.org says never to use attributes[index].
>
> metaTags[i].name works in Opera and Internet Explorer. Safari (on 
> Windows) won't respond to any of the above.
>
> Can anyone help me out and point me down a good route for detecting a 
> specific meta tag in a document? The pages this will be used on may have 
> multiple other meta tags or no meta tags.
>
> Thanks,
> Dave 
>   
Dave,

If the attribute access is not consistent across browsers, you could 
resort to a hackish but effective use of innerHTML--see below.

- Ken Snyder


function getDocumentMeta() {
    var source = document.getElementsByTagName('head')[0].innerHTML;
    var pattern1 = /<meta[^>]+name="([^"]+)"[^>]+content="([^"]+)"[^>]*>/i;
    var pattern2 = /<meta[^>]+content="([^"]+)"[^>]+name="([^"]+)"[^>]*>/i;
    var match, meta = {};
    while (source.length > 0) {
        if (match = source.match(pattern1)) {
            meta[match[1]] = match[2];
            source = source.slice(match.index + match[0].length);
        } else if (match = source.match(pattern2)) {
            meta[match[2]] = match[1];
            source = source.slice(match.index + match[0].length);       
        } else {
            source = '';
        }
    }
    return meta;
}
var meta = getDocumentMeta();
if (!meta['DCSext.wt_m']) {
  // add the meta
}



More information about the thelist mailing list