2013-05-25 4 views
2

Мне было трудно отлаживать javascript, который отлично работал в Firefox и Chromium, но не в браузере Android.Является ли «медиа» зарезервированным ключевым словом в браузере браузера Android?

И, наконец, я понял, что проблема возникла из-за того, что я использовал переменную media (португальское слово для average).

После смены media на media_calculada проблема исчезла.

Checkout этот пример:

<!DOCTYPE html> 
<html> 
    <head> 
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script> 
     <script type="text/javascript"> 
      function debug(msg) { 
       $('#debug').val($('#debug').val() + '\n' + msg); 
      } 
      $(document).ready(function(){ 
       media = 'simple string'; 
       othervar = 'simple string'; 
       debug(media); 
       debug(othervar); 
      }); 
     </script> 
    </head> 
<body> 
<textarea id="debug"></textarea> 
</body> 
</html> 

, что образец страницы приводит следующий вывод для каждого браузера:

Ubuntu Firefox:

simple string 
simple string 

Android Firefox:

simple string 
simple string 

Android 2.3.7 родной браузер:

[ object Media ] 
simple string 

Вы можете ясно видеть, что проблема возникает только в родном браузере Android.

Я искал googled, чтобы узнать, могу ли я найти информацию об этом, но я этого не сделал. (главным образом потому, что медиа является таким широко используемым словом).

Итак, мой вопрос:

ли media зарезервированное ключевое слово в Android браузер?

ответ

2

Вы неправильно определили вашу проблему. Фактически вы видите медиа-свойство глобального объекта.

При попытке доступа к определенной переменной (например, media) JavaScript будет искать цепочку областей видимости, пытаясь найти для нее декларацию. Если он не найдет его, он будет попробует, чтобы создать свойство на глобальном объекте.

Однако, нет гарантии, что такое свойство доступно для записи. По-видимому, в вашем случае свойство media глобального объекта нет.

То, что вы должны делать это объявить переменные:

var media = 'simple string'; 
var othervar = 'simple string'; 

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

+0

Удивительный анализ! Ты прав! Если я попробую 'debug (window.media)' я получаю [object Media]. Если я использую локальную переменную или использую document.media, тогда она работает нормально! Тем не менее, я не нашел документацию об этом объекте window.media в браузере Android! Если когда-нибудь я их найду, я обновлю этот вопрос! Спасибо за помощь! – pagliuca

Смежные вопросы