Пространство имен Javascript и проблема с IE7 - PullRequest
1 голос
/ 20 декабря 2010

Я реализовал решение для пространства имен 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... 
  }
};

Я включаю этот скрипт на своей странице, плюс другие вещи:

<!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.

Любые намеки о том, что здесь может быть не так? Что-то не так с порядком обработки файлов Javascript в IE7? Любое другое предположение?


Примечание: для полной справки все это выполняется в http://app.portasigma.com/isme/signwidget/iframe/, а JS-файл пространства имен действительно называется http://app.portasigma.com/isme/media/signwidget/jquery-isigmaWidget.js

Ответы [ 3 ]

4 голосов
/ 20 декабря 2010

Это запятая после "Разума". Смотри: 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 голосов
/ 20 декабря 2010

Вам нужно удалить последнюю запятую после всех свойств / методов, которые вы определили.

старые версии 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-->
1 голос
/ 09 марта 2015

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...