2

作業中のサイトにカスタムコンテキストメニューを実装したい。私は、開発中のメインブラウザであるOperaを除くすべてで動作するdocument.oncontextmenuを使用しました。Operaで同じ結果を得るにはどうすればよいですか?デフォルトのコンテキストメニューを無効にして、私のものを表示する必要があります。

document.body.onmousedownはOperaで認識されないため、最初にマウスの右クリックを選択します。

ありがとう、R。

4

4 に答える 4

3

少し調べてみると、jQueryコンテキスト メニュー プラグインに関する興味深い情報が見つかりました。

*Opera 9.5 には、スクリプトが右クリックを検出できるようにするオプションがありますが、デフォルトでは無効になっています。さらに、Opera では、JavaScript がブラウザのデフォルトのコンテキスト メニューを無効にすることをまだ許可していません。これにより、ユーザビリティの競合が発生します。

正しい方向に導く可能性のある別の興味深いビットを、opera.linux google グループで見つけました。

oncontextmenuOpera は、これらのスクリプトが使用するJavaScript イベントをサポートしていません。Opera は をサポートし onrightclickていますが、ご覧のとおり、デフォルトでは無効になっています。過去に開発者から、サポートの実装はoncontextmenuのエイリアスを作成するほど簡単ではないと言われたことonrightclickがあります。

event.button...そして、右クリックをテストするために使用するこのコードスニペット...

          addEventListener('mouseup',function(e){
                    if( e && e.button == 2 ){
                            document.write('a');
                            return false;
                    }
            },true); 

ただし、これらのソリューションのいずれも、(最初に引用されたセグメントに基づいて) あなたが望むものを提供するものではありません... Opera は、Web ページを右クリックすると常にユーザーに「標準の」コンテキスト メニューを表示する必要があると考えているようです。

于 2009-12-12T05:56:37.663 に答える
1

簡単に言うと、Opera の設定で設定を有効にする必要があり、oncontextmenu はまだサポートされていないため、mousedown または click イベントをリッスンする必要があります。

一部のスクリプトは、設定が有効になっているときに Opera 独自のコンテキスト メニューを無効にする (非常に醜い) ハックを使用します。mousedown イベントから、非表示の <input type=button> 要素を作成し、クリックが発生した場所に配置します。Opera にはボタンの右クリック メニューがないため、内部メニューは表示されません。私が言ったように、それは非常に醜いです:-p

oncontextmenu の適切なサポートは、Opera の次のリリース バージョンで提供される予定です。もちろん、マイナーな安定性とセキュリティの更新は考慮されていません。醜い回避策が気に入らない場合は、それを待ってください..

于 2009-12-14T18:46:30.500 に答える
1

Opera は意図的に右クリックをスクリプトに渡さないようにしていると思います。右クリック時に愚かな「コピー防止」ポップアップメッセージを表示する Web サイトが多すぎると思います。

(右クリック -> サイト設定の編集 -> スクリプト -> スクリプトによるコンテキスト メニュー イベントの検出を許可) を変更すると、Opera が期待どおりに動作するようになると思いますか?

于 2009-12-09T00:48:43.300 に答える
1

uTorrent Web UI は、オペラの右クリックで何らかの形でカスタム コンテキスト メニューを表示します。そのソースを調べて、それがどのように実装されたかを調べることができます。

于 2009-12-11T07:10:00.910 に答える