Autor Zpráva
Jan Tvrdík
Profil
Existuje způsob, jak zablokovat kontextové menu (při stisku pravého tlačítka) v Opeře?
Následující kód funguje ve FF, ale nefunguje v Opeře.
<div
	style="width: 200px; height: 200px; background-color: blue;"
	oncontextmenu="return false;"
	onmousedown="boxMouseRightClick(event);"
></div>

<script>
function boxMouseRightClick(event)
{
	if(event.button != 2) return;
	event.target.style.backgroundColor = 'red';
}
</script>
Str4wberry
Profil
Kdyby sis v Opeře zaškrtl „Povolit skriptu přijímat kliknutí pravým tlačítkem myši“, možná by to šlo.
Bubák
Profil
Hlavní problém je, že ve výchozím nastavení prohlížeče Opera je volba Povolit scriptu příjimat klepnutí pravým tlačítkem myši vypnutá.
Jan Tvrdík
Profil
Voba „Povolit skriptu přijímat kliknutí pravým tlačítkem myši“ se postará pouze o to, že se spustí boxMouseRightClick, ale nepostará se o zablokování kontextového menu.
Bubák
Profil
Já si myslí, že to nepůjde, přesněji ani Seznamu se to na Mapy.cz nepodařilo zablokovat.
peta
Profil
Jan Tvrdík
zkusil bych se podivat, jak to resi fck editor nebo tinymcf. Jestli jim to tam funguje, pak ta moznost je.

function boxMouseRightClick(event)
{
if(event.button != 2) return;
event.target.style.backgroundColor = 'red';
}

je totez jako
function boxMouseRightClick(event)
{
if(event.button != 2) {return true;}
event.target.style.backgroundColor = 'red';
return true;
}
a muzes zkusit tudiz
function boxMouseRightClick(event)
{
if(event.button != 2) {return false;}
event.target.style.backgroundColor = 'red';
return false;
}
Jan Tvrdík
Profil
peta
Díky za radu. V TinyMCE kontextové menu v Opeře nefunguje, ale v FCKeditoru funguje -> musí existovat nějaký způsob, jak to napsat. Otázka je, jak čistě a zda se mi to někdy podaří ze zdrojových kódu FCKeditoru vytáhnout.

EDIT: Naděje vkládám hlavně do http://svn.fckeditor.net/FCKeditor/trunk/editor/_source/classes/fckcon textmenu.js
Jan Tvrdík
Profil
Výše uvedený skript skutečně obsahoval řešení. Už jsem myslel že žádné neexistuje.

Řešení
<div
	style="width: 200px; height: 200px; background-color: blue;"
	oncontextmenu="return false;"
	onmousedown="boxMouseRightClick(event); killContextMenu(event)"
></div>

<script>
function boxMouseRightClick(event)
{
	if(event.button != 2) return false;
	event.target.style.backgroundColor = 'red';
}

var overrideButton;

function killContextMenu( e )
{
	if( !e || e.button != 2 )
		return false ;

	var el = e.target ;
	
	if (!overrideButton) {
		overrideButton = document.createElement('input');
		overrideButton.type = 'button';
		var buttonHolder = document.createElement('p');
		document.body.appendChild( buttonHolder );
		buttonHolder.appendChild( overrideButton ) ;
	}		

	overrideButton.style.cssText = 'position:absolute;top:' + ( e.clientY - 2 ) +
		'px;left:' + ( e.clientX - 2 ) +
		'px;width:5px;height:5px;opacity:0.01' ;

	return false ;
}
</script>


Jak to funguje
Vloží na kliknutou pozici neviditelné tlačítku, které kliknutí "absorbuje".

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: