LINUX.ORG.RU

[IE][JavaScript] Неизвестная ошибка выполнения.

 ,


0

0

Приветствую, имеется код:

function createRequestObject() {
    var objAjax;
    if(navigator.appName == "Microsoft Internet Explorer") {
        try {
            objAjax = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (e) {
            objAjax = new ActiveXObject("Microsoft.XMLHTTP");
        }
    }
    else {
        objAjax = new XMLHttpRequest();
    }
    return objAjax;
}

var http = createRequestObject();

function getNewContent(src) {
    http.open('get', src);
    http.onreadystatechange = updateNewContent;
    http.send(null);
    return false;
}

function updateNewContent() {
    if(http.readyState == 4) {
        document.getElementById('CONTENT').innerHTML = http.responseText;
    }
}
который без проблем и нареканий выполняется во всех браузерах окромя InternetExplorer, ругаясь при этом на «Неизвестная ошибка» в строке
document.getElementById('CONTENT').innerHTML = http.responseText;
Так вот, как можно получить больше информации о проблеме, может существует какой-нибудь плагин для IE? И в принципе, как это можно побороть?
Спасибо.



Последнее исправление: genesis_error (всего исправлений: 1)

>может существует какой-нибудь плагин для IE

firebug lite.

Иначе - трейс алертами, пока не локализируешь баг.

З.Ы. А ЗАЧЕМ ЭТОТ КОД??? jquery (например) чем не подошел?

anonymous
()

Обычно логика вот в таком духе, ну да впрочем…

function createAJAXObject() {
	if (window.XMLHttpRequest) {
		return new XMLHttpRequest();
	} else if(window.ActiveXObject) {
		return new ActiveXObject("Microsoft.XMLHTTP");
	} else {
		return false;
	}
}
Deleted
()

И так, потерзал jQuery - ошибка в IE убралась. Собственно сам код:

<script src="jquery.js"></script>
<script type="text/javascript">
    function getNewContent(src) {
        $("#CONTENT").load(src);
    }
</script>
Всем спасибо.

genesis_error
() автор топика
Ответ на: комментарий от xorik

> http://meilon.ru/ajax.js

работает везде



правильно!

ибо знать какой именно «брауер» используется («if(navigator.appName == ...» ) — это КРИВОЙ путь..

потомучто — важно не какой БРАУЗЕР используется, а какие ФУНКЦИИ Javascript доступны в используемом браузере!!

mkfifo
()
Ответ на: комментарий от wfrr

именно, потому шо апи бравзеров меняется и функции могут появляться и исчезать

вот именно поэтому я предлагаю встраивать GoogleChromeFrame не на основе того что распознал MSIE по его сигнатуре, а на основе того что распознанно неправильное поведение браузера которое характерно ьраузеру MSIE:

(function(window) {
	var document = window.document;
	var XMLHttpRequest = window.XMLHttpRequest;
	
	var addEventListener = function(element, Type, Listener, UseCapture) {
	// потомучто 'Microsoft IE' не поддерживает addEventListener()
		if(element.addEventListener != null) {
			element.addEventListener(Type, Listener, UseCapture);
		} else if(element.attachEvent != null) {
			element.attachEvent('on' + Type, Listener);
		} else {
			throw "addEventListener() not implemented";
		}
	};
	
	var detectMicrosoftIE = function() {
	// детектирование 'Microsoft IE' по характерным несоответствиям стандартам
		
		if( // детектирование версий: '6.0', '7.0', '8.0'
			window.addEventListener == null && // <-- нет важной функции
			window.attachEvent != null // <-- но есть нестандартная альтернатива
		) {
			return true;
		}
		
		// <ЗДЕСЬ> в будущем возможно будет детектирование других версий
		
		return false;
	};
	
	var makeClearBothDiv = function() {
		var clearBothDiv = document.createElement('div');
		clearBothDiv.style.clear = 'both';
		
		return clearBothDiv;
	};
	
	var makeGoogleChromeFrameNotify = function() {
		var install = document.createElement('input');
		install.type = 'button';
		install.value = 'Установть';
		install.style.cssFloat = 'right'; // <-- 'Microsoft IE' не поддерживает это
		install.style.styleFloat = 'right'; // <-- специально для 'Microsoft IE'
		addEventListener(install, 'click', function(Event) {
			window.location.assign('http://www.google.com/chromeframe/eula.html');
		}, false);
		
		var googleChromeFrame = document.createElement('span');
		googleChromeFrame.style.fontWeight = 'bold';
		googleChromeFrame.appendChild(
			document.createTextNode(
				'Chrome Frame'
			)
		);
		
		var learnMore = document.createElement('span');
		learnMore.style.cursor = 'pointer';
		learnMore.style.color = 'rgb(0,0,255)';
		learnMore.appendChild(
			document.createTextNode(
				'Узнать больше'
			)
		);
		addEventListener(learnMore, 'click', function(Event) {
			window.location.assign('http://code.google.com/intl/ru/chrome/chromeframe/');
		}, false);
			
		
		var text = document.createElement('div');
		text.style.padding = '5px';
		text.appendChild(
			document.createTextNode(
				'У Вас не установлен компонент '
			)
		);
		text.appendChild(googleChromeFrame);
		text.appendChild(
			document.createTextNode(
				', необходимый для корректной работы Вашего браузера ('
			)
		);
		text.appendChild(learnMore);
		text.appendChild(
			document.createTextNode(')')
		);
		
		var notify = document.createElement('div');
		notify.style.padding = '3px';
		notify.style.font = '12px "DejaVu Sans", "Sans", sans-serif';
		notify.style.border = '1px rgb(245,245,181) outset';
		notify.style.background = 'rgb(245,245,181)';
		notify.style.color = 'rgb(0,0,0)';
		notify.appendChild(install);
		notify.appendChild(text);
		notify.appendChild(makeClearBothDiv());
		
		return notify;
	};
	
	var showNotify = function(notify) {
		if(document.body.firstChild != null) {
			document.body.insertBefore(notify, document.body.firstChild);
		} else {
			document.body.appendChild(notify);
		}
	};
	
	var main = function(Event) {
		if(detectMicrosoftIE()) {
			var notify = makeGoogleChromeFrameNotify();
			
			showNotify(notify);
		}
	};
	
	addEventListener(window, 'load', main, false);
})(window);

это кстате и уберёт «проблемы» и различными реализациями window.XMLHttpRequest в MSIE и в не-MSIE... :-)

mkfifo
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.