[Greasemonkey] Odwołanie się do zmiennej ze <script/>

0

Witam serdecznie, mam (być może trywialne) pytanie dotyczące pośrednio języka JavaScript, a dokładnie rozszerzenia Greasemonkey - czy jest możliwość odwołania się do zmiennej zadeklarowanej w skrypcie dołączonym do dokumentu w postaci tagu <script />?

Przykład dokumentu:
<html>
<body>
<script type="text/javascript">
x = 'wartość';
</script>
</body>

</html> ``` Wszystkie wypróbowane przeze mnie tradycyjne sposoby kończyły się niemiłym wpisem w konsoli, brzmiącym: x is not defined. Czy jest to w takim razie niewykonalne? Jeżeli tak, czy wynika to ze specyfiki tego rozszerzenia? Dodam, że po załadowaniu strony nie ma problemu z dobraniem się do zmiennej (poprzez wpisanie kodu w pasku adresu przeglądarki, czy też korzystając z konsoli Firebuga).

Pozdrawiam.

0
var x = 'wartość';

Deklaruje zmienną globalną. Jednak, jeśli w dodatkowym skrypcie zmienna nie ma słówka VAR przed swoją nazwą, to po zamknięciu tagu <script> się do niej nie dorwiesz.

0

Dzięki za odpowiedź.

Szczerze mówiąc próbowałem w moim testowym dokumencie deklarować zmienną x zarówno z var jak i bez, jednak efekt za każdym razem był ten sam - nie sposób dostać się do zmiennej z wnętrza skryptu Greasemonkey, a udaje się to, gdy po załadowaniu dokumentu uruchamiam w konsoli Firebuga skrypt:

alert(x);
0

Zapewne Greasemonkey ładuje się wcześniej niż skrypty na stronie. Stąd zmienna ta może być niewidoczna.

Rozwiązanie? Poczytaj o zdarzeniu domready. Np.:
document.addEventListener("domready", function(){}, false)

0

Dzięki za ten keyword, udało mi się z jego pomocą trafić na obszerne wiki dotyczące Greasemonkey, z którego dowiedziałem się, że to właśnie skrypty Greasemonkey są uruchamiane w evencie DOMContentLoaded.

Co więcej - przestrzeń, w której operują skrypty to jedynie sandbox i dostęp do rzeczywistego window umożliwia odwołanie się do unsafeWindow, co oczywiście rozwiązuje problem. Na stronie podana jest także alternatywna metoda odwołania się do tego typu zmiennych, która polega na dodaniu własnego elementu <script>.

Dzięki za pomoc. :d

1 użytkowników online, w tym zalogowanych: 0, gości: 1