у меня здесь случается "nextplease is not defined" и дальше дело не идёт. Кроме того "var" очевидно не глобальная, а локальная переменная.
Дальше: то, что ты называешь глобальными переменными на самом деле не глобальные переменные, а поля объекта window.
Т.е. если ты исполняешь код:
nextplease = {};
то на самом деле происходит
window.nextplease = {};
Если у nextpleaseOverlay.js и nextpleaseOptions.js исполняются в контексте разных window, то очевидно они не будут видеть nextplease.
Итого: делать так нельзя.
А как надо? Мой маленький опыт подсказывает решение, через модули: нужно создать модуль, который бы содержал "глобальные" переменные (на самом-то деле нужна ведь не глобальная переменная, а видимая внутри расширения и не больше) и импортировать его всюду, где эти глобальные переменные нужны.
у меня здесь случается "nextplease is not defined" и дальше дело не идёт Хм. Непонятно, почему у меня так не случается.
Кроме того "var" очевидно не глобальная, а локальная переменная. В любом другом языке мне тоже было бы очевидно, но неоднократно читал, что в JavaScript блоки не вводят scope. Собственно, на первую мою версию дали ссылку http://blogger.ziesemer.com/2007/10/respecting-javascript-global-namespace.html, где в примере того, как надо делать, написано if(!com) var com={}; if(!com.ziesemer) com.ziesemer={}; if(!com.ziesemer.myPackage) com.ziesemer.myPackage={};
Чего-то опять не понимаю...
Если у nextpleaseOverlay.js и nextpleaseOptions.js исполняются в контексте разных window, то очевидно они не будут видеть nextplease. Ага! То, что "глобальные переменные" это поля глобального объекта window, я знал, а про то, что эти объекты могут быть разные в одной сессии, не подумал.
Comments 15
Reply
Reply
if (!nextplease) {var nextplease = {};}
у меня здесь случается "nextplease is not defined" и дальше дело не идёт. Кроме того "var" очевидно не глобальная, а локальная переменная.
Дальше: то, что ты называешь глобальными переменными на самом деле не глобальные переменные, а поля объекта window.
Т.е. если ты исполняешь код:
nextplease = {};
то на самом деле происходит
window.nextplease = {};
Если у nextpleaseOverlay.js и nextpleaseOptions.js исполняются в контексте разных window, то очевидно они не будут видеть nextplease.
Итого: делать так нельзя.
А как надо? Мой маленький опыт подсказывает решение, через модули: нужно создать модуль, который бы содержал "глобальные" переменные (на самом-то деле нужна ведь не глобальная переменная, а видимая внутри расширения и не больше) и импортировать его всюду, где эти глобальные переменные нужны.
я сделал эти правки и вроде всё заработало
Reply
Хм. Непонятно, почему у меня так не случается.
Кроме того "var" очевидно не глобальная, а локальная переменная.
В любом другом языке мне тоже было бы очевидно, но неоднократно читал, что в JavaScript блоки не вводят scope. Собственно, на первую мою версию дали ссылку http://blogger.ziesemer.com/2007/10/respecting-javascript-global-namespace.html, где в примере того, как надо делать, написано
if(!com) var com={};
if(!com.ziesemer) com.ziesemer={};
if(!com.ziesemer.myPackage) com.ziesemer.myPackage={};
Чего-то опять не понимаю...
Если у nextpleaseOverlay.js и nextpleaseOptions.js исполняются в контексте разных window, то очевидно они не будут видеть nextplease.
Ага! То, что "глобальные переменные" это поля глобального объекта window, я знал, а про то, что эти объекты могут быть разные в одной сессии, не подумал.
Спасибо большое! Сейчас посмотрю на
Reply
Leave a comment