[JavaScript/Mozilla] - Context-menu in een RichText IFRAME

Pagina: 1
Acties:

  • gvanh
  • Registratie: April 2003
  • Laatst online: 02-12-2023

gvanh

Webdeveloper

Topicstarter
Ben al een tijdje heel veel scripts aan het bekijken, zowel binnen GoT als los op internet. Wat ik graag wil is een eigen-gemaakt Context-Menu (onder de rechter-muisklik) binnen een Iframe document, waarvan de designMode property op "On" staat.

Nu is het rare, dat ik het wel voor elkaar krijg om de 'oncontextmenu' en 'onmousedown' events af te vangen, op het moment dat de designMode niet aan staan. Maar dat werkt niet meer, op het moment dat ik designMode aanzet.

Overigens gaat het hier specifiek om Mozilla. In Internet Explorer werkt het wel zonder problemen.

Ter illustratie een versimpelde pagina:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<html>
<head>
  <title>Editor</title>
    <script>
    function init() {
        var iframeDoc = document.getElementById('editor').document;
        iframeDoc.oncontextmenu =   function() { return false; }
        iframeDoc.onmousedown = function() { return false; }
        iframeDoc.designMode = "On";
    }
    </script>
</head>
<body onLoad='init()'>
<iframe id='editor' src='test.html'></iframe>
</body>
</html>


Als je nou regel 9 weghaalt, dan wordt er geen contextmenu getoond als je 'rechts' klikt. Als die regel er echter wel staat, dan lijken regel 7 en 8 helemaal niets uit te halen.

Heeft iemand hier een oplossing voor ... of wellicht een script dat in deze situatie wel werkt?

Alvast bedankt!

Verwijderd

Hij doet het wel als je het event registreert...

/* Edit... Ben net achter een bug in IE gekomen. Haal maar eens het woord var weg voor het ophalen van het frame element. Dan kent IE opeens het contentWindow niet meer 8)7. Gecko heeft er geen problemen mee...
*/

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
  <head>
    <title></title>
    <script type="text/javascript">

window.onload = function (e) {
  var f = document.getElementById("f");
  f.contentWindow.document.designMode = "On";
  addEvent(f.contentWindow.document, "contextmenu", function (e) {
    alert('hmmm boe!');
  });
}

function addEvent(el, evname, func) {
  try {
    if (el.attachEvent) {
      el.attachEvent("on" + evname, func);
    } else if (el.addEventListener) {
      el.addEventListener(evname, func, false);
    } else {
      return (false);
    }
  } catch (e) {
    return (false);
  }
  return (true);
};

    </script>
  </head>
  <body>
    <iframe id="f" style="width: 400px; height: 400px;"></iframe>
  </body>
</html>

[ Voor 39% gewijzigd door Verwijderd op 17-09-2004 20:43 ]


  • gvanh
  • Registratie: April 2003
  • Laatst online: 02-12-2023

gvanh

Webdeveloper

Topicstarter
Ligt het dan aan mijn specifieke Mozilla versie, dat ik ook bij dit voorbeeld, nadat weliswaar de "Hmmmm boe" alert verschijnt, een context-menu krijg in Mozilla.

Overigens ook als ik na alert('hmmm boe!'); nog een 'return false' toevoeg.

Check ook: http://www.thirdwave.nl/editor/disable2.html.

Verwijderd

Voeg maar even een: e.cancelBubble = true toe ;)

offtopic:
no offence, maar mijn msn is niet bedoelt voor online helpdesk ;)

[ Voor 51% gewijzigd door Verwijderd op 18-09-2004 10:16 ]


  • gvanh
  • Registratie: April 2003
  • Laatst online: 02-12-2023

gvanh

Webdeveloper

Topicstarter
Jij enorme held! Nu doet hij het inderdaad.

Mijn dank is groooot!

offtopic:
MSN toevoegen was niet voor deze vragen, maar om in te informeren naar beschikbaarheid/prijzen van je editor. Leek me minder geschikt om dat via GoT te doen...

[ Voor 17% gewijzigd door gvanh op 18-09-2004 10:21 ]


Verwijderd

Jah, kom op zeg! Nu begin ik echt te twijfelen aan je eigen inzet 8)7.
Wat dacht je van: voor de alert().
Wel even die alert(); weghalen en een return(false) voor in de plaats.

code:
1
2
3
4
5
6
7
8
window.onload = function (e) {
  var f = document.getElementById("f");
  f.contentWindow.document.designMode = "On";
  addEvent(f.contentWindow.document, "contextmenu", function (e) {
    e.returnValue= false;
    return false;
  });
}


offtopic:
Nou kijk, dan mag je me altijd toevoegen, maar ik zit niet echt te wachten op tig vragen. Sorry, voor het vooroordeel...

[ Voor 19% gewijzigd door Verwijderd op 18-09-2004 10:21 ]

Pagina: 1