getElementsByTagName () ведет себя по-разному в IE и FF - PullRequest
1 голос
/ 13 октября 2010

Я новичок в JavaScript, пытаясь выяснить значение тега информации. Код GWT выглядит следующим образом ..

public static native boolean isToolBarInstalled() /*-{
    alert("Validating the toolbar installed.");
    var metas = document.getElementsByTagName('head')[0].getElementsByTagName('meta');
        var i;
        alert ("Meta length: "+metas.length);
        for (i = 0; i < metas.length; i++){
            alert("Value: "+metas[i].value);
            if (metas[i].getAttribute('name') == "toolbar"){
                return true;
            }
        }

        return false;
        }-*/;

FF возвращает true, тогда как IE возвращает false для той же страницы? Любые подсказки / предложения будут полезны.

WM.

HTML слишком велик для публикации, вот фрагмент кода ..

<html>
<head>
    ....
    <title>My App</title>
    <meta name="toolbar" content="1.0">
</head>
<body>
.....
</body>
<html>

Ответы [ 2 ]

0 голосов
/ 13 октября 2010

У меня работает в IE7.

Убедитесь, что до конечного тега <meta> нет никакого текстового содержимого, кроме простого пробела.

Если у вас есть текст без пробелов в или до <html> или <head>, браузер решит, что вы намеревались открыть <body> для содержания текста. (Это действительно допустимо в не-XHTML HTML, так как конечный тег </head> и начальный тег <body> являются необязательными.) Это означает закрытие раздела <head>, поэтому количество тегов <meta> внутри <head> будет 0.

В любом случае вы также можете просто сказать:

var metas= document.getElementsByTagName('meta');

, так как бит о проверке их в <head> избыточен для действительного документа; это единственное место, где разрешено появляться <meta>.

        alert("Value: "+metas[i].value);

Нет .value на <meta>, вы имеете в виду .content?

        if (metas[i].getAttribute('name') == "toolbar"){

Используйте metas[i].name. Нет смысла использовать getAttribute / setAttribute в документе HTML, и в IE возникают проблемы с ним.

0 голосов
/ 13 октября 2010

Попробуйте это:

element.attributes[value].nodeAttribute;

Как объяснено здесь :

Метод getAttribute () вернет «ноль» в Internet Explorer, когда пытаясь получить для атрибута элемент метки.

Может быть, тот же вопрос ...

Хорошо смотри:

В этом примере он работает на IE.

function isToolBarInstalled() {
    alert("Validating the toolbar installed.");
    var metas = document.getElementsByTagName('head')[0].getElementsByTagName('meta');
    var i;
    alert ("Meta length: "+metas.length);
    for (i = 0; i < metas.length; i++){
        alert("Value: "+metas[i].value);

        var attr = metas[i].getAttribute('name');

        // IE workaround
        if (attr == null)
        {
            attr = metas[i].attributes["name"];
            if (attr != null) attr = attr.nodeValue;
        }

        if (attr == "toolbar")
            return true;
    }

    return false;
}

alert( "Is installed: " + isToolBarInstalled() );
...