Сплит проблема Internet Explorer - PullRequest
0 голосов
/ 24 июля 2011

После более раннего вопроса, связанного с этой ошибкой.

Ошибка: невозможно получить значение свойства split: объект нулевой или неопределенный

Был предложен ответ для добавления следующегоcode:

/* Cross-Browser Split 1.0.1
(c) Steven Levithan <stevenlevithan.com>; MIT License
An ECMA-compliant, uniform cross-browser split method */

var cbSplit;

// avoid running twice, which would break `cbSplit._nativeSplit`'s reference to the native `split`
if (!cbSplit) {

cbSplit = function (str, separator, limit) {
    // if `separator` is not a regex, use the native `split`
    if (Object.prototype.toString.call(separator) !== "[object RegExp]") {
        return cbSplit._nativeSplit.call(str, separator, limit);
    }

    var output = [],
        lastLastIndex = 0,
        flags = (separator.ignoreCase ? "i" : "") +
                (separator.multiline  ? "m" : "") +
                (separator.sticky     ? "y" : ""),
        separator = RegExp(separator.source, flags + "g"), // make `global` and avoid `lastIndex` issues by working with a copy
        separator2, match, lastIndex, lastLength;

    str = str + ""; // type conversion
    if (!cbSplit._compliantExecNpcg) {
        separator2 = RegExp("^" + separator.source + "$(?!\\s)", flags); // doesn't need /g or /y, but they don't hurt
    }

    /* behavior for `limit`: if it's...
    - `undefined`: no limit.
    - `NaN` or zero: return an empty array.
    - a positive number: use `Math.floor(limit)`.
    - a negative number: no limit.
    - other: type-convert, then use the above rules. */
    if (limit === undefined || +limit < 0) {
        limit = Infinity;
    } else {
        limit = Math.floor(+limit);
        if (!limit) {
            return [];
        }
    }

    while (match = separator.exec(str)) {
        lastIndex = match.index + match[0].length; // `separator.lastIndex` is not reliable cross-browser

        if (lastIndex > lastLastIndex) {
            output.push(str.slice(lastLastIndex, match.index));

            // fix browsers whose `exec` methods don't consistently return `undefined` for nonparticipating capturing groups
            if (!cbSplit._compliantExecNpcg && match.length > 1) {
                match[0].replace(separator2, function () {
                    for (var i = 1; i < arguments.length - 2; i++) {
                        if (arguments[i] === undefined) {
                            match[i] = undefined;
                        }
                    }
                });
            }

            if (match.length > 1 && match.index < str.length) {
                Array.prototype.push.apply(output, match.slice(1));
            }

            lastLength = match[0].length;
            lastLastIndex = lastIndex;

            if (output.length >= limit) {
                break;
            }
        }

        if (separator.lastIndex === match.index) {
            separator.lastIndex++; // avoid an infinite loop
        }
    }

    if (lastLastIndex === str.length) {
        if (lastLength || !separator.test("")) {
            output.push("");
        }
    } else {
        output.push(str.slice(lastLastIndex));
    }

    return output.length > limit ? output.slice(0, limit) : output;
};

cbSplit._compliantExecNpcg = /()??/.exec("")[1] === undefined; // NPCG: nonparticipating capturing group
cbSplit._nativeSplit = String.prototype.split;

} // end `if (!cbSplit)`

// for convenience...
String.prototype.split = function (separator, limit) {
    return cbSplit(this, separator, limit);
};

После пробного кода, приведенного выше, и удаления кэшей было обнаружено, что он ничего не делает ... может кто-нибудь помочь, с наилучшими пожеланиями заранее.код, но можете ли вы предложить какую-либо дальнейшую помощь, так как я чуть не вырываю волосы, и в итоге это не сработало, стоит отметить, что кнопка ссылки на главной странице (если она закомментирована) делает этот сайт полезным для домастраница и ошибка исчезает, но я действительно хочу, чтобы ссылки на каждой выдержке из поста на главной странице были очень важны.

1 Ответ

2 голосов
/ 24 июля 2011

Firefox показывает мне ошибку скрипта в строке 913 в этой части вашего скрипта:

<script type="text/javascript">
    // <![CDATA[
        var disqus_shortname = 'mobileinquirer';
        var disqus_domain = 'disqus.com';
        (function () {
            var nodes = document.getElementsByTagName('span');
            for (var i = 0, url; i < nodes.length; i++) {
                if (nodes[i].className.indexOf('dsq-postid') != -1) {
                    nodes[i].parentNode.setAttribute('data-disqus-identifier', nodes[i].getAttribute('rel'));
                    url = nodes[i].parentNode.href.split('#', 1);
                    if (url.length == 1) url = url[0];
                    else url = url[1]
                    nodes[i].parentNode.href = url + '#disqus_thread';
                }
            }
            var s = document.createElement('script'); s.async = true;
            s.type = 'text/javascript';
            s.src = 'http://' + disqus_domain + '/forums/' + disqus_shortname + '/count.js';
            (document.getElementsByTagName('HEAD')[0] || document.getElementsByTagName('BODY')[0]).appendChild(s);
        }());
    //]]>
    </script>

Конкретная ошибка в этой строке:

url = nodes[i].parentNode.href.split('#', 1);

, и это потому, что parentNode делаетне иметь HREF.Эта ошибка не имеет ничего общего с функцией разделения.Код пытается получить значение атрибута href для parentNode, но атрибута href нет, поэтому он разрешается как неопределенный, поэтому вызов split не выполняется.Это не имеет ничего общего с функцией разделения.Проблема в том, что ваша разметка, по-видимому, неверна, и я считаю, что код disqus ожидает тег вокруг тега, но не находит его.

Если вы посмотрите на строку 664-665 в mobilinquirer.com Исходный код HTML, вы найдете эту последовательность в этой строке, а затем несколько раз:

<p><span
class="dsq-postid">8 Comments</span></p>

Этот код вызывает ошибку.Тег <span class="dsq-postid"> должен иметь тег <a href="xxx"> как родительский, иначе вы получите эту ошибку.Я вижу эту же проблему несколько проблем в вашем HTML.

Эта проблема не имеет никакого отношения к функции разделения.Чтобы устранить эту ошибку, вам нужно исправить свой HTML-код так, чтобы он соответствовал ожидаемому коду disqus, или удалить нарушающий код disqus (который вам, кажется, не нужен) или оба.

...