Pobranie zmiennej do skryptu

0

Cześć. Postanowiłem poprosić o pomoc, ponieważ nie potrafię poradzić z prostą rzeczą. Chcę pobrać sobie zmienną do skryptu z innego pliku "guage.asp". Załączam pliki z kodem witryny.
index.html

<!doctype html>
<html lang="pl">
<head>

    <meta name="GENERATOR" content="Microsoft FrontPage 6.0">
    <meta name="ProgId" content="FrontPage.Editor.Document">
    <meta http-equiv="pragma" content="no-cache">
    <script language="javascript" >
    self.resizeTo(1240,768); </script>
    <title>Pomiary KTW - KTX</title>

</head>

<frameset rows="100%,*">
	<frame name="main" src="main.html" target="_self">
	<frame name="footer" scrolling="no" noresize target="main" src="guage.asp">
  <noframes>
  <body>

  

  </body>
  </noframes>
<frame src="UntitledFrame-1"></frameset>


</html>	

guage.asp

<html>
<head>
<meta http-equiv="refresh" content="1" />
<meta http-equiv="pragma" content="no-cache" />
<script type="text/javascript" src="/scripts/conversion.js"></script>
<style>
</style>
</head>
<body>
<script language="javascript">
	var guage = 10;	
	parent.main.document.form75.guage.value=guage;
</script>
</body>
</html>

Z "main.html" uruchamiana jest podstrona "guage.html "
guage.html

<html>
<head>
<meta http-equiv="refresh" content="10" />
<meta http-equiv="pragma" content="no-cache" />
<script type="text/javascript" src="/scripts/conversion.js" ></script>

<style>
</style>

</head>
<body>
	<form method="post" name="form75" >
	<input type="text" id="guage"  >
 </form>

<script >
	alert(document.getElementById('guage').value);
</script>

</body>
</html>

Efekt jest taki, że po uruchomieniu strony "guage.hlml " wyskakuje okno alertu bez żadnej wartości. Po kliknięciu "ok" w okienku formularza pojawia się prawidłowa wartość z pliku "guage.asp" . Dlaczego w skrypcie nie ma wartości 10, a w formularzu jest?

2

Wygląda dość oczywiście, czyli skrypt wykonuje się za nim ta wartość tam będzie, najpierw alert, potem ustawiasz input na 10.

0
GodOfCode. napisał(a):

Wygląda dość oczywiście, czyli skrypt wykonuje się za nim ta wartość tam będzie, najpierw alert, potem ustawiasz input na 10.

Dzięki za odpowiedz. Zdaję sobie z tego sprawę dlatego uważam, że kolejność przetwarzania jest dobra. Pierw wprowadzam 10 do dokumentu, później skrypt z alertem.
Jak zmienię kolejność w sekcji body lub dam skrypt do <HEAD> to w ogóle nie wyskakuje okno alertu.

Próbowałem nawet czegoś takiego i to samo.

<script>
	document.addEventListener("DOMContentLoaded", function() {
          alert(document.getElementById('guage').value);
});
</script>
2

Zakładam, że to ci działa:
parent.main.document.form75.guage.value=guage

W pierwszym pliku

parent.main.document.form75.guage.value=guage;
parent.main.document.form75.guage.dispatchEvent(new Event("runAlert"));

i w tym drugim pliku

<body>

	<form method="post" name="form75" >
	<input type="text" id="guage"  >
 
 </form>

<script >
    document.getElementById('guage').addEventListener("runAlert", (e) => alert(e.target.value))
</script>

Jakby nie poszło tak, to można jeszcze przez window.postMessage i window.addEventListener, do wysyłania eventów pomiędzy iframe.

Dodatkowo ten frameset jest deprecated i będzie usunięty z przeglądarek: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/frameset

1
<frameset rows="100%,*">
	<frame 

Ale wiesz, że od jakichś kilkunastu lat nikt tak nie pisze? Nawet MDN zwraca uwagę, że jest to deprecated
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/frame

ogólnie robisz jakąś archeologię i jeżeli nie masz dobrego powodu (bo np. modyfikujesz jakiś legacy code z 2005 roku) to trochę mija się z celem pisanie w ten sposób w 2023 roku.

Owszem, dzisiaj można użyć i używa się czasem elementu iframe(nie mylić z frame), ale znowu - po co w tym przypadku? (tzn. mam wrażenie, że próbujesz wyciągnąć armatę na muchy, gdzie w rzeczywistości twoje cele można osiagnąć inaczej - czyli daj sobie sposób z ramkami, to problem zniknie).

Chcę pobrać sobie zmienną do skryptu z innego pliku "guage.asp".

Czy to pobieranie ma być tylko frontend <--> frontend (bo np. frontend <---> backend nie da się bezpośrednio przekazać zmiennej, ale można wysłać np. JSONa za pomocą fetch)? I pytanie, czy to przekazanie zmiennych ma być odporne na przeładowanie strony (jeśli tak, to np. localStorage może się przydać).

Ale jeśli jest to frontend <--> frontend to po prostu przekazujesz tę zmienną w odpowiedni sposób.

0
GodOfCode. napisał(a):

Zakładam, że to ci działa:
parent.main.document.form75.guage.value=guage

W pierwszym pliku

parent.main.document.form75.guage.value=guage;
parent.main.document.form75.guage.dispatchEvent(new Event("runAlert"));

i w tym drugim pliku

<body>

	<form method="post" name="form75" >
	<input type="text" id="guage"  >
 
 </form>

<script >
    document.getElementById('guage').addEventListener("runAlert", (e) => alert(e.target.value))
</script>

Jakby nie poszło tak, to można jeszcze przez window.postMessage i window.addEventListener, do wysyłania eventów pomiędzy iframe.

Dodatkowo ten frameset jest deprecated i będzie usunięty z przeglądarek: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/frameset

Zadziałało Przyjacielu :) masz sporą wiedzę w temacie. Zaoszczędziłeś mi to dużo czasu. Mam jeszcze prośbę. Alertu używałem tylko dlatego, aby sprawdzić czy w skrypcie jest dostępna zmienna 'guage'.
Potrzebuję mieć dostępną zmienną 'guage' w skrypcie w dokumencie 'guage.html'. Podałbyś mi przykładowy zapis?

2
adamkce napisał(a):

Potrzebuję mieć dostępną zmienną 'guage' w skrypcie w dokumencie 'guage.html'. Podałbyś mi przykładowy zapis?

w tej funkcji (e) => e.target te e.target powinno być równe temu input#gauge

A tak dalej możesz użyć tego document.getElementById('guage') gdyż już prawdopodobnie wartość tego inputu jest zaktualizowana.
Oczywiście wartość .value musisz odczytać dynamicznie, a nie globalnie, czyli najlepiej w jakiejś funkcji.

0
LukeJL napisał(a):
<frameset rows="100%,*">
	<frame 

Ale wiesz, że od jakichś kilkunastu lat nikt tak nie pisze? Nawet MDN zwraca uwagę, że jest to deprecated
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/frame

ogólnie robisz jakąś archeologię i jeżeli nie masz dobrego powodu (bo np. modyfikujesz jakiś legacy code z 2005 roku) to trochę mija się z celem pisanie w ten sposób w 2023 roku.

Owszem, dzisiaj można użyć i używa się czasem elementu iframe(nie mylić z frame), ale znowu - po co w tym przypadku? (tzn. mam wrażenie, że próbujesz wyciągnąć armatę na muchy, gdzie w rzeczywistości twoje cele można osiagnąć inaczej - czyli daj sobie sposób z ramkami, to problem zniknie).

Chcę pobrać sobie zmienną do skryptu z innego pliku "guage.asp".

Czy to pobieranie ma być tylko frontend <--> frontend (bo np. frontend <---> backend nie da się bezpośrednio przekazać zmiennej, ale można wysłać np. JSONa za pomocą fetch)? I pytanie, czy to przekazanie zmiennych ma być odporne na przeładowanie strony (jeśli tak, to np. localStorage może się przydać).

Ale jeśli jest to frontend <--> frontend to po prostu przekazujesz tę zmienną w odpowiedni sposób.

Dzięki kolego za odpowiedz. Używam takiej konstrukcji strony i takich elementów, bo korzystam z modułu WebServera sterownika PLC trochę archaicznego, który interpretuje taką formę i polecenia. Na tym sprzęcie jest serwer i nie ma możliwości jego update. :)

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