SCR24: Új ablak megnyitása a felhasználói kérésre történő progresszív fejlesztéssel
Alkalmazás
HTML 4.01 és XHTML 1.0
Ez a technika az alábbiakra vonatkozik:
Leírás
A technikának az a célja, hogy elkerülhetővé váljon a
felhasználó szándéka ellenére megjelenő új ablak okozta
zavar. A hirtelen megnyíló ablakok bizonyos
felhasználókat megzavarhatnak, vagy teljesen elkerülhetik
a felhasználók figyelmét. Abban az esetben, ha a
dokumentum típusa nem teszi lehetővé a
target
attribútum alkalmazását (ez az
attribútum nem létezik a HTML 4.01 Strict vagy XHTML 1.0
Strict verziókban), vagy a szerkesztő mellőzi annak
használatát, akkor az új ablak az ECMAScript
alkalmazással nyitható meg. Az alábbi példa a szkripttel
történő új ablak megnyitását szemlélteti. A szkript egy
eseménykezelővel egészíti ki a hivatkozást (<a>
tag) és figyelmezteti a felhasználót arra, hogy a
tartalom egy új ablakban fog megjelenni.
Példák
1. példa
Kijelölés:
A dokumentum fejlécében szereplő szkript horogpontként használja a hivatkozás azonosítóját.
Példa kód:
<script type="text/javascript" src="popup.js"></script>
?
<a href="help.html" id="newwin">Show Help</a
Szkript:
Példa kód:
// Use traditional event model whilst support for event registration
// amongst browsers is poor.
window.onload = addHandlers;
function addHandlers()
{
var objAnchor = document.getElementById('newwin');
if (objAnchor)
{
objAnchor.firstChild.data = objAnchor.firstChild.data + ' (opens in a new window)';
objAnchor.onclick = function(event){return launchWindow(this, event);}
// UAAG requires that user agents handle events in a device-independent manner
// but only some browsers do this, so add keyboard event to be sure
objAnchor.onkeypress = function(event){return launchWindow(this, event);}
}
}
function launchWindow(objAnchor, objEvent)
{
var iKeyCode, bSuccess=false;
// If the event is from a keyboard, we only want to open the
// new window if the user requested the link (return or space)
if (objEvent && objEvent.type == 'keypress')
{
if (objEvent.keyCode)
iKeyCode = objEvent.keyCode;
else if (objEvent.which)
iKeyCode = objEvent.which;
// If not carriage return or space, return true so that the user agent
// continues to process the action
if (iKeyCode != 13 && iKeyCode != 32)
return true;
}
bSuccess = window.open(objAnchor.href);
// If the window did not open, allow the browser to continue the default
// action of opening in the same window
if (!bSuccess)
return true;
// The window was opened, so stop the browser processing further
return false;
}
Források
A források csak információs célokat szolgálnak, és csak angolul elérhetőek.
Kapcsolódó technikák
Ellenőrzések
Folyamat
-
Aktiválja a dokumentum összes hivatkozását és ellenőrizze, hogy a tartalom új ablakban nyílik-e meg.
-
Minden új ablakban megnyíló hivatkozás esetében ellenőrizze, hogy az adott hivatkozás szkript segítségével végzi-e el az alábbiakat:
-
az új ablak megnyitásával kapcsolatos jelzés,
-
hardver független eseménykezelő alkalmazása, és
-
az új ablak megnyílásának elmaradása esetén lehetővé teszi-e azt, hogy a böngésző az eredeti ablakban jelenítse meg a tartalmat.
-
Elvárható eredmények
- A 2. pont igaz