这些天,在学习写GM脚本,感触良多,总结了一些心得,其中印象最深刻的,莫过于为新建元素添加事件监听了。
由于GM的运行是在一个单独的空间内,此空间在页面载入后才实现。所以,GM所定义的函数,与页面头部<head></head>内所定义的函数并不相同,不能被页面元素所调用。
而使用createElement()+appendChild()创建的元素,在创建动作完成后,也属于页面元素,不能直接调用GM自定义函数。如果直接使用元素的onclick属性或setAttribute("onclick",XXX)尝试调用,会在事件触发时得到一个undefined。
这时,需要使用addEventListener,才能调用自定义函数。
然而,addEventListener所调用函数,不能带参数,否则在元素创建时,它所调用函数就要被执行,而不是等待事件触发才执行。这个比较崩溃。
但有时候,某些参数一定要传递,怎么办呢?
http://g.mozest.com/thread-31048-1-1
由于GM的运行是在一个单独的空间内,此空间在页面载入后才实现。所以,GM所定义的函数,与页面头部<head></head>内所定义的函数并不相同,不能被页面元素所调用。
而使用createElement()+appendChild()创建的元素,在创建动作完成后,也属于页面元素,不能直接调用GM自定义函数。如果直接使用元素的onclick属性或setAttribute("onclick",XXX)尝试调用,会在事件触发时得到一个undefined。
这时,需要使用addEventListener,才能调用自定义函数。
然而,addEventListener所调用函数,不能带参数,否则在元素创建时,它所调用函数就要被执行,而不是等待事件触发才执行。这个比较崩溃。
但有时候,某些参数一定要传递,怎么办呢?
http://g.mozest.com/thread-31048-1-1