2012-04-11 54 views
1

我试图用插件生成器开发Firefox插件。使用page-mod(Firefox Addon)添加onclick事件到特定按钮

我想修改基于Web邮件的邮件编辑器。 (在以下代码中,我正在尝试使用Yahoo! Japan的邮件服务。)

我想在用户按下发送按钮时执行特定的代码。

这个插件的代码是:

main.js

var self = require("self"); 
var pageMod = require("page-mod"); 


pageMod.PageMod({ 
    include: "*.mail.yahoo.co.jp", 
    contentScriptWhen: 'end', 
    contentScript: "document.getElementById('send_top').setAttribute('onclick', 'alert(\"blabla\")');" 
}); 

在邮件编辑器页面的按钮:

<input id="send_top" class="inputbutton" type="submit" title="Submit an email" 
     value="Submit" name="action_msg_send" accesskey="9"> 

当用户 “提交” 按钮,我想显示对话框。

回答

4

它看起来像你不在你的内容脚本中正确添加onclick处理程序。您可能会改用这样的代码:

document.querySelector('#send_top').onclick = function() { 
    alert('bla bla'); 
} 

下面是这一个工作示例的附加建设者:

https://builder.addons.mozilla.org/addon/1048430/latest/

一个缺点使用contentScript属性添加内容脚本代码难以调试。一对夫妇的指针,以使它更容易些:

  • 总是用“contentScriptFile”,并在位于您的附加的数据文件夹中一个单独的js文件编写代码。

  • 使用Firefox的'Scratchpad'开发者工具测试你的代码,你可以通过工具 - >开发者 - > ScratchPad打开它。要做到这一点:

    • 打开你修改
    • 打开便签页
    • 您的JS代码粘贴到便签
    • 去执行 - > Run来运行你的代码
+0

谢谢你的回答。 我用Scratchpad尝试过,然后成功显示对话框,但是当我在contentScript中编写代码时,它似乎无法正常工作。 (对话框未显示。) 您的示例已正确工作。 – 2012-04-13 06:20:35

+0

寻找JS错误,可能会有一些迹象表明为什么你的代码不工作。例如,您尝试绑定click事件的元素在加载页面后可能不存在,因为它可能是由JavaScript创建的。 – canuckistani 2012-04-13 20:25:16

+0

糟糕...我没有找到错误控制台,直到你指出它... 无论如何,正如你所说,组成页面似乎由JavaScript加载..错误控制台显示以下错误: TypeError:document.querySelector “#send_top”)为空 该插件似乎不加载邮件组成页面,但索引页。 合成页面有#_pg =合成URL中的锚点。当我删除这个锚点时,它会显示索引页面,当然在那里没有#send_top ID的元素。 – 2012-04-16 09:24:32

相关问题