Пространство имен Javascript и проблема с IE7
Я применил решение для определения имен Javascript на основе этого ответа на другой вопрос: Как объявить пространство имен в JavaScript?
Позвольте называть это isigma-ns.js:
var ISIGMA = {
messages: {
noValidId: "No valid ID found",
reason: "Reason",
// etc...
},
language: "ca",
SIGN: 2,
PAUSE: 400,
params: {},
init: function(params) {
// etc...
},
delay: function(callback) {
// etc...
},
// etc...
signURL: function(cert, url) {
// etc...
}
};
Я включаю этот script на мою страницу, а также другие вещи:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>Isigma Signature Widget</title>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8"/>
<!-- Required javascript and styles for isigma widget-->
<script type="text/javascript" src="/isme/media/signwidget/jquery-1.4.4.min.js"></script>
<script type="text/javascript" src="/isme/media/signwidget/isigma-ns.js"></script>
<script type="text/javascript">
$(function(){
$("#applet").isigmaSignatureApplet({
purpose: ISIGMA.SIGN,
url: the_url,
language: 'es'
});
});
</script>
... и т.д...
Он отлично работает в Firefox, IE8, Chrome, Opera... но не работает в IE7 с сообщением "ISIGMA не определено" - ссылаясь на строку, где я делаю ссылку на ISIGMA.SIGN
.
Любые намеки на то, что здесь может быть неправильным? Что-то не так с порядком обработки IE7 файлов Javascript? Любое другое предположение?
Примечание: для полной ссылки все работает в http://app.portasigma.com/isme/signwidget/iframe/, а JS файл пространства имен действительно называется http://app.portasigma.com/isme/media/signwidget/jquery-isigmaWidget.js
Ответы
Ответ 1
Это запятая после "Причина". Смотрите: http://jsbin.com/upiba5/2/edit
Изменить: на вашем живом сайте дополнительная запятая, которую я вижу, следующая:
documentLockedByAnother: "Это документ в настоящее время заблокирован другой пользователь, повторите попытку позже",
var ISIGMA = {
messages: {
noValidId: "No valid ID found",
reason: "Reason"
// etc...
},
language: "ca",
SIGN: 2,
PAUSE: 400,
params: {},
init: function(params) {
// etc...
},
delay: function(callback) {
// etc...
},
// etc...
signURL: function(cert, url) {
// etc...
}
};
Ответ 2
Вам нужно удалить последнюю запятую после всех свойств/методов, которые вы определили.
более старые версии IE зашумели на этом.
var ISIGMA = {
messages: {
noValidId: "No valid ID found",
reason: "Reason",
// etc...
},
language: "ca",
SIGN: 2,
PAUSE: 400,
params: {},
init: function(params) {
// etc...
},
delay: function(callback) {
// etc...
},<====-- if this is the LAST property/method, you need to omit the comma.
// etc...
};
Обновление: может возникнуть другая потенциальная проблема из тегов
<script src="..."/><!--prone to parsing bugs/errors-->
против.
<script src="..."></script><!--correct-->
Ответ 3
У вас есть загрузка двух внешних скриптов, а затем сразу запускается встроенный script. Скрипты могут загружаться асинхронно или даже вообще не загружаться. Браузеры могут выполнять одну задачу и полностью загружать один script, прежде чем переходить к следующему script, и для них можно запускать несколько одновременных запросов, и они могут дождаться завершения всех внешних запросов до продолжение синтаксического анализа встроенных скриптов; но у вас мало (если есть) контроль над тем из тех опций, которые любой конкретный браузер решает реализовать. У меня нет IE7, поэтому я не могу поэкспериментировать, чтобы увидеть, отличается ли его действие от IE8. Вы должны убедиться, что второй script полностью загружен перед запуском встроенного script.