1

UserScript問題のコードは a の一部であり、通常の DOM ルールと Javascript メソッドは機能しないということから始めましょう。

状況は次のとおりです。

オンライン チャット サイトとやり取りする UserScript を作成しました。buttonユーザースクリプト内で生成されるものがいくつかあります。これらのボタンの一部はフォーム内にありますが、多くはそうではありません。

GreaseMonkey を介して追加された要素は、2 つの世界に存在します。それらはページ DOM に存在し、UserScript のわずかに高い世界に存在します。つまり、これらの行は次のようになります。

event.preventDefault = true;
event.stopPropagation = true;

残りのUserScriptアクションが実行されないようにしますが、ボタンによるフォームの送信は停止しません。

回避策として、 のspan代わりに要素を構築していbuttonます。これは機能しますが、実際にはチャット ルームの視覚的なレイアウトが崩れます。

投稿UserScriptsを防ぐために追加された要素を防ぐ方法を知っている人はいますか? formそれができなければ、誰かがspanネイティブのように見せる方法を知っていることを夢見ますbutton.

編集:動作しているように見えるソリューションがありますが、すべての UserScript 環境で完全にテストしていません:

  // Yes, yes, poorly named but it was a SPAN
  // userWindow is an alias for unsafeWindow.
  // (Used to run under a userScript environment for IE and I had to emulate a lot)
  var span = document.createElement("input");
  span.value = text;
  span.type = "button";
  span.className = "cpbutton";

  // Add it to the body just long enough to set up a page-level, DOM0 event handler
  var body = userWindow.document.getElementsByTagName("body")[0];
  var tname = "IAmTheVeryModelOfAModernMajorGeneral";     
  span.id = tname;
  body.appendChild(span);
  userWindow.document.getElementById(tname).onclick = function() {return false;};
  body.removeChild(span);
  span.id = "";
4

2 に答える 2

2

の W3C 仕様を<button>参照してください。
デフォルトでは、<button>要素はフォーム内の送信ボタンとして機能します。これは、event.preventDefault()(正しい使用法、ところで)、クリック ハンドラーで、フォームの送信を停止するのに十分でない可能性があることを意味します。

その場合、フォームの送信イベントもインターセプトできますが賢明なことは、type属性を使用して、ボタンを送信ボタンとして扱わないようにブラウザーに指示することです。
例えば:

<button type="button">Your button markup</button>
于 2012-09-20T02:02:06.573 に答える
0

あなたが言う時

UserScripts によって追加された要素を防ぐため フォームの送信を防ぐため

フォームの送信を許可するか禁止するかがわかりません...

とにかく、ここに alinkと a をdiv装ったものがありbuttonます: http://jsfiddle.net/RASG/PvhUb/

ええ

コードの一部を投稿していただければ、スクリプトの作成をお手伝いできます。

于 2012-09-20T01:16:29.510 に答える