Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

surcharge de méthode

33 réponses
Avatar
Christophe PEREZ
Bonjour,

Dans un contexte très particulier (développement d'un mini-navigateur
spécifique en XUL pour borne internet), j'ai besoin d'interdire tout
popup en redirigeant l'ouverture de l'url dans la fenêtre principale (la
seule).

Je ne souhaite pourtant pas désactiver le javascript (j'ai la main sur
l'installation des clients firefox) car je voudrais en conserver certains
avantages.

J'ai bien essayé de tenter d'utiliser les différents systèmes
anti-popup, mais la plupart ne fonctionne que sur les popup non
désirées, et pas sur les liens <a href="window.open('...')"> Or pour
moi, ce n'est pas compliqué, il faut qu'aucune autre fenêtre ne puisse
s'ouvrir. Un plugin pourtant (tabextensions) semblerait faire l'affaire,
mais je ne parviens ni à l'intégrer dans mon appli, ni à en retirer le
principe afin de le réutiliser.

J'ai donc pensé que la "surcharge" de la méthode window.open pourrait
être une solution, mais j'avoue être loin d'un expert de l'objet et
encore moins de ce genre de procédés.

J'ai bien essayé des window.prototype.open = ma_function(); (et
autres) mais sans résultat

NB : J'ai bien dit que c'est un contexte très particulier. Je sais ce que
je fais et justement, dans ce cadre, je dois totalement maîtriser le
client et ne laisser à l'utilisateur que les possibilités que je
souhaite.

PS : J'ai l'impression que c'est une question pour YD ça ;-)

Merci grandement d'avance.

--
Christophe PEREZ
Écrivez moi sans _faute !

10 réponses

1 2 3 4
Avatar
Christophe PEREZ
Le Tue, 08 Feb 2005 20:12:08 -0400, Christophe PEREZ a écrit:

En fait, tout onclick, quelque soit sa position, mais ça veut dire aussi
parser le javascript ! De la folie ce truc.


Mais non en fait, je suis bête. J'ai déjà surchargé la méthode
window.open() de mon document.
J'ai aussi parsé tous les target="_blank".
Le onclick n'est pas en lui même une fonction d'ouverture de fenêtre, il
doit nécessairement passer par un window.open() (ou?).

La question est donc, que reste-il comme méthode (à part ces deux là)
pour ouvrir une fenêtre ?
Perso, je n'en vois pas(plus), à part le JS qui écrit du html à la
volée avec des attributs target="_blank".

--
Christophe PEREZ
Écrivez moi sans _faute !

Avatar
ASM

Le Tue, 08 Feb 2005 20:12:08 -0400, Christophe PEREZ a écrit:

En fait, tout onclick, quelque soit sa position, mais ça veut dire aussi
parser le javascript ! De la folie ce truc.


Mais non en fait, je suis bête. J'ai déjà surchargé la méthode
window.open() de mon document.
J'ai aussi parsé tous les target="_blank".


oui mais, à ce que je crois, tu n'es pas parsé les self et les sans rien

Le onclick n'est pas en lui même une fonction d'ouverture de fenêtre, il
doit nécessairement passer par un window.open() (ou?).

La question est donc, que reste-il comme méthode (à part ces deux là)
pour ouvrir une fenêtre ?


essaie de mettre page1 dans ta borne et clique le lien

page1.htm
<html><head>
<base target="_blank">
</head>
<a href="page2.htm">page 2</a>
</html>

page2.htm
<html>
<h2>gagné ou perdu ?</h2>
</html>



--
*******************************************************
Stéphane MORIAUX et son vieux Mac
Aide Pages Perso (images & couleurs, formulaire, CHP)
http://perso.wanadoo.fr/stephane.moriaux/internet/
*******************************************************


Avatar
ASM

Oui, mais ce que je veux dire, c'est qu'à partir du moment ou je
supprimer tous les attributs target de la page, même celui du <BASE>
sautera.


Tu ne t'interreses qu'aux liens avec target
pas à ceux démunis de target

liste[lien].removeAttribute('target');

Je crois que de plus tu ne t'interresses qu'au body
hors on peut mettre en head un target général ...

Est-ce que <base> est une balise ? :

var liste = container.getElementsByTagName('*');

Est-ce que 'container' recouvre l'ensemble de la page ?

réponse : à moins que je n'ait mal compris ton script ->
non tu ne traites pas les liens||objets sans target
(à mon sens et celui de mon IE, alors régits par le <base target > )


oui, je comprends rien.


alors essaie les 2 pages données dans l'autre post

et tant mieux si je me trompe en lisant ton script

à + +

--
*******************************************************
Stéphane MORIAUX et son vieux Mac
Aide Pages Perso (images & couleurs, formulaire, CHP)
http://perso.wanadoo.fr/stephane.moriaux/internet/
*******************************************************


Avatar
Christophe PEREZ
Le Wed, 09 Feb 2005 02:44:15 +0100, ASM a écrit:

oui mais, à ce que je crois, tu n'es pas parsé les self et les sans rien


Ben, quel est l'intérêt ? Ils vont nécessairement s'ouvrir dans la
fenêtre courante, non ?

essaie de mettre page1 dans ta borne et clique le lien

page1.htm
<html><head>
<base target="_blank">
</head>
<a href="page2.htm">page 2</a>
</html>

page2.htm
<html>
<h2>gagné ou perdu ?</h2>
</html>


Perdu !
Mais en fait, le problème n'est plus ici un problème de parsing je
pense, mais plutôt un problème d'interprétation par le navigateur
_avant_ mon parsing (ou alors d'objet parsé).

En effet, même en faisant un removeChild sur le <BASE>, le lien continue
à s'ouvrir dans un _blank. Comme si l'interprétation du <BASE
target="_blank"> se faisant pendant le chargement de la page, et que quoi
que j'y change ensuite, cela soit sans effet.

Pas bon, mais vraiment pas bon du tout ça.

--
Christophe PEREZ
Écrivez moi sans _faute !

Avatar
Christophe PEREZ
Le Wed, 09 Feb 2005 02:58:31 +0100, ASM a écrit:

Tu ne t'interreses qu'aux liens avec target
pas à ceux démunis de target


exact.

liste[lien].removeAttribute('target');

Je crois que de plus tu ne t'interresses qu'au body


nop, voir plus bas.

hors on peut mettre en head un target général ...

Est-ce que <base> est une balise ? :

var liste = container.getElementsByTagName('*');

Est-ce que 'container' recouvre l'ensemble de la page ?


Oui, oui, pas de soucis pour ça.
Le premier "child" que je traite dans la pyramide est bien <html>

Voici les logs de ma fonction de parsing :
Balise : HTML
Balise : HEAD
Balise : BASE
Balise : BODY
Balise : A
Attributs : href = page2.html

l'attribut target du <base> a bien été supprimée.

oui, je comprends rien.



Ici, c'était une coquille, il fallait lire "oui, je comprends *b*ien",
évidemment, ça n'a pas le même sens.

alors essaie les 2 pages données dans l'autre post


Fait, répondu là-bas.

et tant mieux si je me trompe en lisant ton script


Ni l'un ni l'autre. Tu ne sembles pas te tromper, mais l'erreur ne semble
pas être là, en tout cas, pas comme j'ai compris que tu me la mets en
évidence.

Ceci dit, merci pour ton aide, parce que parfois, devant ce genre de
trucs, on se trouve tout bête seul dans son coin.

--
Christophe PEREZ
Écrivez moi sans _faute !


Avatar
ASM

Le Wed, 09 Feb 2005 02:44:15 +0100, ASM a écrit:

<h2>gagné ou perdu ?</h2>


Perdu !
Mais en fait, le problème n'est plus ici un problème de parsing je
pense, mais plutôt un problème d'interprétation par le navigateur
_avant_ mon parsing (ou alors d'objet parsé).

En effet, même en faisant un removeChild sur le <BASE>,


j'ai l'impression qu'il est formellement interdit de toucher
à ce BASE (mon IE s'y casse les dents)

Ce qui paraît normal puisqu'il sert aussi à la localisation
du root du site

Donc je te propose :
http://perso.wanadoo.fr/stephane.moriaux/truc/target_self.htm
(mettre tout à self, qui prend le pas sur le blank du base)

si tu fais les tests en ligne
passer par les racourcis clavier pour ne pas recharger la demo

à + +
--
*******************************************************
Stéphane MORIAUX et son vieux Mac
Aide Pages Perso (images & couleurs, formulaire, CHP)
http://perso.wanadoo.fr/stephane.moriaux/internet/
*******************************************************


Avatar
YD

En effet, même en faisant un removeChild sur le <BASE>, le lien continue
à s'ouvrir dans un _blank. Comme si l'interprétation du <BASE
target="_blank"> se faisant pendant le chargement de la page, et que quoi
que j'y change ensuite, cela soit sans effet.


Il y a quelque chose qui m'échappe... Normal ! je ne connais pas XUL :-)

Mais en parcourant la doc (elemref) je vois que l'élément browser a quasi
toutes ses propriétés concernant son contenu positionné à readonly. Comment
fais-tu dès lors pour modifier le contenu de la page affichée ???

J'ai tout de même l'impression que tu pars sur une fausse piste. Ce n'est
pas, je crois, en essayant de modifier le contenu que tu arriveras à tes
fins, mais en interceptant les évènements se produisant quand un lien est
activé : où doit-il s'ouvrir, même page, nouvel onglet, nouvelle fenêtre,
nouvelle fenêtre avec chrome réduit ? XUL doit forcément fournir des
moyens de récupérer cela (sinon les ouvertures dans des onglets au lieu
d'une nouvelle fenêtre ne seraient pas possibles avec une extension).

Par ailleurs, es-tu sûr de ne pas vouloir écrire quelque chose qui est
déjà prévu dans Firefox ? Voir (en anglais, mais c'est court) :
http://www.mozilla.org/support/firefox/tips#beh_tabbedbrowsingoptions

--
Y.D.

Avatar
ASM

Par ailleurs, es-tu sûr de ne pas vouloir écrire quelque chose qui est
déjà prévu dans Firefox ? Voir (en anglais, mais c'est court) :
http://www.mozilla.org/support/firefox/tips#beh_tabbedbrowsingoptions


Ha ? la borne ne fonctionne qu'avec FF ?

Mais oui ! maintenant que tu le dis : viser le Kiosk Mode
http://tln.lib.mi.us/~amutch/pro/phoenix/kiosk.htm

Au fait, çà se trouve où FF ?
car je n'arrive pas à l'avoir ici (Fr Mac Os X)
http://www.mozilla.org/products/firefox/all.html
-> bad request !


--
*******************************************************
Stéphane MORIAUX et son vieux Mac
Aide Pages Perso (images & couleurs, formulaire, CHP)
http://perso.wanadoo.fr/stephane.moriaux/internet/
*******************************************************

Avatar
YD

Au fait, çà se trouve où FF ?
car je n'arrive pas à l'avoir ici (Fr Mac Os X)
http://www.mozilla.org/products/firefox/all.html
-> bad request !



Tu as le choix :
http://frenchmozilla.org/ ou plus conventionnellement
http://www.mozilla-europe.org/fr/ et plus précisément
http://www.mozilla-europe.org/fr/products/firefox/
(8.6 Mo pour MacOS X, mais t'es peut-être plus en RTC
maintenant que t'as une belle machine kivavit...)

--
Y.D.

Avatar
ASM


Au fait, çà se trouve où FF ?
car je n'arrive pas à l'avoir ici (Fr Mac Os X)
http://www.mozilla.org/products/firefox/all.html
-> bad request !


Tu as le choix :
http://frenchmozilla.org/ ou plus conventionnellement
http://www.mozilla-europe.org/fr/ et plus précisément
http://www.mozilla-europe.org/fr/products/firefox/


Merci suis déjà pasé chez french et çô môrche pô non plus

Je reviens d'europe et ai cliqué le lien
http://ftp.eu.mozilla.org/pub/mozilla.org/firefox/releases/1.0/mac/fr-FR/Firefox 1.0.dmg.gz
Hop! bad request !

et Camino non plus il veulent pas me le refiler
ftp://ftp.hosting.cri74.org/incoming/services/75d862751efa65d5a738b61d722892e7/Camino-0.8-fr.dmg.gz

(est-ce parceque je ne suis pas sous Mac Os X ?)

(8.6 Mo pour MacOS X, mais t'es peut-être plus en RTC
maintenant que t'as une belle machine kivavit...)


Ben la machine kivavit je l'use pas sur le Net ;-)
et non l'ADSL ce sera pour Mai (de quelle année ? pas précisé)

--
*******************************************************
Stéphane MORIAUX et son vieux Mac ramant avec le G4
*******************************************************


1 2 3 4