2016-04-19 9 views
0

Es scheint, dass es nicht möglich ist, einen Rechtsklick in Javascript zu emulieren.Wie man mit der rechten Maustaste von Javascript

Ich habe versucht, ein Element nach rechts klicken (Absatz) in einem Iframe wie folgt aus: es

html

<button onclick="popup_context_menu_in_iframe()"> 
    popup menu 
</button> 
<br/><br/> 
<iframe srcdoc="<p>Hello world!</p>"> 
</iframe> 

Skript

function popup_context_menu_in_iframe() 
{ 
    var $element = $('iframe').contents().find('p');  
    var element = $element.get(0); 

    if (window.CustomEvent) { 
    element.dispatchEvent(new CustomEvent('contextmenu')); 
    } else if (document.createEvent) { 
    var ev = document.createEvent('HTMLEvents'); 
    ev.initEvent('contextmenu', true, false); 
    element.dispatchEvent(ev); 
    } else { // Internet Explorer 
    element.fireEvent('oncontextmenu'); 
    } 
} 

https://jsfiddle.net/sca60d64/2/

Es scheint so, Eigentlich ist es unmöglich, das Kontextmenü erscheinen zu lassen, also muss ich fi andere Wege.

Ich habe zuerst eine Chrome-Erweiterung erstellt, um dem Fensterobjekt eine Funktion hinzuzufügen, die von jedem Skript aufgerufen werden kann, das dafür zusätzliche Energie benötigt.

Eine Chrome-Erweiterung scheint mir jedoch überraschenderweise keine Möglichkeit zu geben, Funktionen im Fensterobjekt zu erstellen. Ich habe mir nicht angesehen, ob es mir sogar die Möglichkeit gibt, das Kontextmenü zu öffnen.

Ich experimentierte nicht viel mit Chrome-Erweiterungen, bevor ich aufgab.

Also brauche ich eine andere Lösung.

Es spielt keine Rolle, ob eine Lösung nur in Google Chrome funktioniert oder ob es keine Garantie gibt, dass sie in der nächsten Version nicht mehr funktioniert.

Sollte ich den Chrome-Prozess mit einer DLL haken? Ist es das?

+0

Es ist möglich: http://stackoverflow.com/questions/7914684/trigger-right-click-using-pure-javascript – wf4

+0

Scheint wie es war nicht möglich, das in meinem iframe Beispiel zu tun, die Frage wurde bearbeitet . –

Antwort

1

Dies sollte mit diesem Markup arbeiten:

<div id="mything"> 
Howdy this is my thing 
</div> 

Ereignishandler: (deaktivieren Standard)

var el=document.getElementById("mything"); 
el.addEventListener('contextmenu', function(ev) { 
    ev.preventDefault(); 
    alert('success!'); 
    return false; 
}, false); 

Dann, wenn Sie diese aus, "Erfolg!" Benachrichtigung durch den Text gefolgt Wechsel zu „Howdy dies mein Ding ist diese aufgehoben wird“:

EDIT Ereignishandler: (nicht deaktivieren Standard)

var el=document.getElementById("mything"); 
el.addEventListener('contextmenu', function(ev) { 
    ev.preventDefault(); 
    alert('success!'); 
    return true; 
}, true); 

Dann, wenn Sie diese ausführen " Erfolg!"Warnungen gefolgt von dem Text zu ändern, um "Hallo dies ist mein Ding dies nicht abgebrochen":

function simulateRightClick() { 
    var event = new MouseEvent('contextmenu', { 
    'view': window, 
    'bubbles': true, 
    'cancelable': true 
    }); 
    var cb = document.getElementById('mything'); 
    var canceled = !cb.dispatchEvent(event); 
    var cbtext = cb.textContent; 
    if (canceled) { 
    // A handler called preventDefault. 
    console.log("canceled"); 

    cb.textContent = cbtext + "this is canceled"; 
    } else { 
    // None of the handlers called preventDefault. 
    cb.textContent = cbtext + "this is NOT canceled"; 
    console.log("not canceled"); 
    } 
} 
simulateRightClick(); 

Testen Sie hier aus: https://jsfiddle.net/MarkSchultheiss/bp29s0j4/

EDIT: Auswahl-Wechsel:

var fcb = document.getElementById('myframe').contentWindow.document.getElementById('pid'); 
fcb.addEventListener('contextmenu', function(ev) { 
    ev.preventDefault(); 
    alert('successFrame!'); 
    return false; 
}, false); 

Gegeben diese Markierung:

<iframe id='myframe' srcdoc="<p id='pid'>Hello world!</p>"> 
</iframe> 
+0

Entschuldigung, bei dieser Frage ging es nicht darum, wie das Kontextmenü deaktiviert wird. Ich habe den Titel geändert. –

+0

Was Sie mit diesem Ereignis tun, wenn es ausgelöst wird, liegt bei Ihnen. Geben Sie true zurück, wenn Sie nicht deaktivieren möchten, beachten Sie, dass das Standardmenü NICHT im Skript angezeigt wird (nicht möglich). –

+0

Ich möchte das Rechtsklick-Ereignis emulieren, nicht empfangen. –

1

Sie können eine DLL von einer Exe-Datei in der Chrome-Erweiterung über Native Messaging aufrufen. Ich habe ein Beispiel für Native Messaging-Verfahren in dieser Antwort bereitgestellt: See the answer of this question

Ich hoffe, nützlich zu sein.

+0

Ich möchte dies ohne Zusammenarbeit mit dem Webpage-Skript tun. –

Verwandte Themen