【问题标题】:Pressing GMail's styling buttons using javascript使用 javascript 按下 GMail 的样式按钮
【发布时间】:2012-07-02 10:01:43
【问题描述】:

我正在 GMail 中编辑邮件。我想按下其中一个样式按钮,例如“缩进”、“缩进”、“从右到左”等。

我不想通过按下来做到这一点,而是通过在地址栏中键入一段 javascript 并按下回车键。

(我有兴趣这样做,所以我可以编写一个使用键盘而不是鼠标按下按钮的脚本。)

这可能吗?

赏金:

赏金将授予提供完整的工作解决方案的人,我可以将其放入 Chrome 的地址栏中以触发按钮(如“缩进”、“链接”、“凸出”、“右” -to-left”等)被按下。 (当然,每个按钮的行不同。)

【问题讨论】:

  • 这没有意义。将javascript添加到地址栏中的地址???
  • 其实是的:javascript:/*html-encdoed js code here*/; 你可以把它放到地址栏中然后执行。
  • 看到这个问题:stackoverflow.com/questions/961532/… 和/或这个答案stackoverflow.com/a/7524096/803925 -- 可能有用
  • @nbrooks 你可以,但前提是地址栏中只有这个,而不是当地址栏中已经有 URL 时。
  • @PeeHaa no...您可以摆脱 url 栏中的任何内容,粘贴到您的 js 中并执行。它在当前页面上运行。

标签: javascript gmail


【解决方案1】:

要选择元素,您首先需要选择 iframe

var inlineFrame = document.getElementById("canvas_frame");

接下来您可以从 iframe 中获取 contentwindow(iframe 的窗口范围),如下所示:

var contentwindow = inlineFrame.contentWindow;

接下来使用 queryselector(仅限真实浏览器(IE8- 不支持)),您可以像这样选择按钮。 ([command='+bold'] 仅表示:任何具有属性命令的元素,其值为 '+bold',就像在 CSS 中一样)。

var button = contentwindow.document.querySelector("[command='+bold']");

如果您检查相关按钮,它们都包含您可以用来选择它们的命令属性。接下来,您可以随心所欲地使用按钮(在 stackoverflow 上寻找其他答案以了解模拟事件的不同方法,因为您应该能够自己做到这一点)。

如果你想把它作为一个书签,你当然也可以用它做一行,但我认为这样作为答案会更清楚。

【讨论】:

  • 听起来不错。能不能给我留个悬念,告诉我点击按钮的函数叫什么名字?我之前尝试了一些,但它们没有用。
  • 这不是一个适合所有情况的函数,因为谷歌可能已经绑定了clickmousedownmouseup,甚至是一系列更奇特的选项(尝试创建一个事件 (@987654321 @) 并沿着"[command='+bold'] > div > div > div" 或循环并在所有"[command='+bold'],[command='+bold'] *") 的行上方的元素的最深子元素处触发它。我只是很快尝试了似乎不是它的点击,但在那一点上停止了,因为它只是体力劳动而不是知识。
  • chrome 的网络检查器在 'onmousedown' 事件处理程序中显示它
  • 我已经在所有孩子身上尝试了mousedown,但没有成功。我希望有人能找到解决办法。
【解决方案2】:

试试Ctrl+BCtrl+ICtrl+U 是这个意思吗?

【讨论】:

  • 我希望 GMail 允许所有按钮都使用这样的快捷方式,例如“缩进”、“缩进”、“从右到左”等。但不幸的是,他们没有。
  • @TylerCrompton,挑战是触发按钮点击。解决之后,将其绑定到一个键就很容易了。
  • 假设你想使用 jQuery。您可以将jQuery(button_selector).click(); 绑定到快捷方式。
  • 除了它不起作用的小细节,你是对的。
【解决方案3】:

首先你需要弄清楚你想要被“点击”的DOM元素的ID/标签索引/css类,然后使用选择器访问它,最后调用它的点击事件。

要动态选择一个DOM元素,如果你知道它的ID,你可以使用document.getElementById(<id>),如果你知道它的标签名和索引,你可以使用document.getElementsByTagName(<tagName>)[<index>]

如果你只知道元素使用了特定的css类,你仍然可以循环每个标签直到element.className==<className>或动态导入jquery然后调用$('.<className>').trigger('click');

希望对你有帮助

【讨论】:

  • David Mulder 的解决方案已经弄清楚了如何选择按钮。剩下的就是触发它上面的事件。我尝试过但失败了,我对尝试感到非常沮丧。
  • 我明白了,他们混淆了所有内容,尤其是事件处理程序......有趣,我会尝试解决这个问题,也许它比我们想象的更难,似乎也不适用于嵌套 div 跨度>
【解决方案4】:

免责声明:更多或通用答案,与 Gmail 没有直接关系。

要单击页面上的任何元素,您可以使用element.click() 方法。请注意,并非所有元素都具有 click 方法。 <input> 元素支持。

我不确定您是否可以从 URL 栏中访问 document 对象。因此,如果我使用的是 Firefox,我会打开 Firebg 或更好的 Scratch Pad(工具 > Web 开发人员 > Scratch Pad)并编写如下内容:-

javascript:function foo(){document.getElementById('link1').click();}foo();

在执行上述代码后,它将在 ID 为“link1”的元素上调用click 方法。

【讨论】:

  • 按钮的 id 是 :lc,但在 Chrome 的 shell 中执行 document.getElementById(':lc') 会得到 null。此外,每次加载时按钮的 id 都会发生变化。如果我有 jQuery,我可以通过其他属性选择按钮,但我不...
  • 您可以在 jQuery 中做的所有事情都可以在普通的 javascript 中完成。这通常只是更多的工作,但如果你有足够的决心,那应该不是问题。
  • 这个答案说你不能用冒号开始一个ID! (stackoverflow.com/questions/70579/…) 确定是身份证??
  • 从技术上讲..."ID 和 NAME 令牌必须以字母 ([A-Za-z]) 开头,后面可以跟任意数量的字母、数字 ([0-9])、连字符(“-”)、下划线(“_”)、冒号(“:”)和句点(“.”)。”
  • 尽管它不应该有一个冒号,但它确实有一个冒号。
猜你喜欢
  • 2015-07-28
  • 2011-01-30
  • 1970-01-01
  • 2011-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-13
  • 1970-01-01
相关资源
最近更新 更多