1

首先让我说有问题的代码是 a 的一部分UserScript,因此,正常的 DOM 规则和 Javascript 方法不起作用。

情况如下:

我编写了一个与在线聊天站点交互的用户脚本。我有一些button是在用户脚本中生成的。其中一些按钮位于表单内部,而许多按钮则不在。

通过 GreaseMonkey 添加的元素存在于两个世界中——它们存在于页面 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

当你说

防止用户脚本添加元素以防止表单提交

我不确定您是要允许还是阻止提交表单...

无论如何,这是link一个div伪装成一个:http button: //jsfiddle.net/RASG/PvhUb/

eee

如果您发布一些代码,我可以帮助您编写脚本。

于 2012-09-20T01:16:29.510 回答