Html programozás. Hogyan tudok egy oldalról (egy linkkel, vagy scripttel) egy másik oldalt megnyitni és azon egy scriptet elindítani?
A probléma – és a szerencse – az, hogy kívülről nem lehet egy oldalt úgy behívni, hogy azon egy olyan script fusson, ami eredetileg nem futott volna. Különben írok egy scriptet, ami meghívja a GYK-t, és privát üzeneteket küldözget. Meg millió és egy visszaélésre adhat okot.
Amit viszont meg lehet tenni, hogy az a.html az egy window.open('b.html') utasítással nyitja meg a b.html oldalt. Ezután a b.html-ből elérhető lesz az a.html window objektuma, amire a b.html-en belül a window.opener -rel lehet hivatkozni. A futtatandó kódot a b.html tartalmazza, ami feltételesen fut le, mondjuk hogyha egyáltalán a window.opener nem null és mondjuk a window.opener.location az, ami, vagy mondjuk van olyan változó, ami kell. (A b.html-ből meg lehet hívni az a.html függvényeit is, de azok az a.html oldalon futnak le.)
Pl.:
======= a.html =======
…
<script>
// …
azEnTitkosValtozom=1;
function csinaljValamit(param) { … }
// …
</script>
…
<div onClick="window.open('b.html')">Gomb</div>
=====================
======= b.html =======
…
<script>
// …
if (window.opener && window.opener.location.href='………/a.html') { … }
// vagy
if (window.opener && window.opener.azEnTitkosValtozom) { … }
// vagy
if (window.opener && typeof window.opener.csinaljValamit == 'function') window.opener.csinaljValamit(param);
// …
</script>
…
=====================
Köszönöm a segítséget. Végül a ChatGpt segített, kb 10 rossz kód után elküldte azt, ami működött is. leírom ide, hátha segít másnak:
-------------------
a.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>a.html</title>
</head>
<body>
<!-- Linkeled a b.html oldalt, és hozzáadsz egy URL paramétert, hogy a script elinduljon -->
<a href="b.html?runScript=true" target="_blank">Nyiss meg és indítsd el a scriptet</a>
</body>
</html>
--------------------
b.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>b.html</title>
<script src="script.js"></script>
</head>
<body>
<!-- Példa elem, amire kattintani szeretnél -->
<button id="c" onclick="runScript()">Kattints ide</button>
</body>
</html>
------------------
script.js
function runScript() {
document.getElementById("c").click();
}
// Ellenőrzi, hogy az oldal megnyitásakor a URL tartalmazza-e a "runScript" paramétert
document.addEventListener("DOMContentLoaded", function() {
const urlParams = new URLSearchParams(window.location.search);
if (urlParams.has('runScript')) {
runScript();
}
});
#4 > A b.html onload scriptjében ellenőrzöd, hogy a referer az a.html volt-e.
Ha abszolút nem kell kommunikálnia a két oldalnak egymással, akkor teljesen jó, egyszerűbb is, mint amit én írtam. A hátránya annyi, hogy a referer átadását le lehet tiltani, de ez valószínű nagyon kevés embert érint. Az én megközelítésemet meg adott esetben egy popup blocker húzhatja keresztül, tehát az sem jobb ebből a szempontból.
Illetve mindkettőnk megoldásának a sajátossága, hogy a b.html újratöltésével a script újra lefut. Hogy most ezt pont jó, vagy pont kerülendő, azt nyilván nem tudjuk.
#5 > b.html?runScript=true
Ezzel az a gond – legalábbis fix, statikus paraméter esetén –, hogy ezt a linket így, a GET paraméterrel együtt meg lehet nyitni önmagában. Mondjuk begépelve, könyvjelzőből megnyitva vagy linkként megkapva. Adott esetben úgy is meg lehet nyitni a b.html?runScript=true URL-t, hogy az adott illető életében nem járt az a.html oldalon. Ez ebben a formában semmivel nem másabb, mintha a b.html oldalt átneveznéd b_runscript.html -re.
Úgy már jobb a dolog, ha GET paraméterrel a UNIX timestampet adod át, a b.html meg azt ellenőrzi, hogy az 5–10 másodpercnél nem régebbi-e. Így tuti, hogy csak akkor fog lefutni a script, ha éppen most lett megnyitva az a.html oldalról. (A b.html újratöltése után viszont – ha 5–10 másodperccel később történik ez meg – a script nem fut le újra, hiszen addigra a süti lejár. Hogy ez most jó-e vagy sem, azt megint nem tudjuk mérlegelni, mert nem adtál elég infót hozzá.) (Meg ez így nyilván eléggé manipulálható kliens oldalról, ami megint nem tudható, hogy baj-e vagy sem.)
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!