从chrome扩展内容脚本中选择的

我无意中尝试从chrome内容脚本激活change()事件。 我已经浏览了网站和谷歌post,但仍然无效。

这里是我试图实现的描述

考虑以下网页(如果有人帮助,可以通过http://www.gilzu.com/TFF/select.html访问):

  Untitled Page   $(document).ready(function () { $('#woot').die('change'); $('#woot').live('change', function () { $('#description').text(jQuery('#woot').val()); }); console.log("window ready"); $("#meh").click(function() { $('#woot').val(15); $('#woot').change(); }); $('#woot').val(21); $('#woot').change(); });    

a b c d e f g

什么工作:1。在启动时,change()激活并将选择框更新为21并在div上显示正确的值。 2.按下#meh按钮,将选择框更改为15,触发在屏幕上显示正确值的change()事件。

到目前为止并不奇怪。

所以我通过以下方式前往内容脚本:

 $(document).ready(function () { $('#woot').val(17); $('#woot').change(); }); 

所以select标签更新,但change()事件不会触发。

我已经阅读了关于chrome扩展孤立世界的论坛,并对此理论进行了测试:

 $(document).ready( function() { $("#meh").click(); }); 

并且它实际上触发了选择框的click事件和change事件!

另外,与另一篇声称与js的代码注入有效的post相矛盾:

 $(document).ready( function() { var x = $(""); $(x).text("$('#woot').val(18); $('#woot').change();"); $("head").append(x); }); 

发出相同的效果:选择框更新,但更改事件不会触发。

我还尝试了以下方法:1。创建一个按钮,例如示例的#meh,附带一个单击事件,触发select标签的更改()。 只有选择更新,没有事件触发。 2.通过attr(),prop(),val()更改选择框的值只选择更新,不会触发事件。 3.通过change(),trigger(’change’)和selectedIndex仅触发选择更新,不触发任何事件来触发事件。 4.通过js 5.延迟命令使用focus()另一个控件,这个控件甚至模糊()选择框,如某些post所示。

非常感谢您的帮助

我真的不知道JQuery,但是如果没有JQuery并且没有在页面中注入任何东西,这里是如何做到的….

 var selections = document.querySelector('#woot'); selections.value = 17; var evt = document.createEvent("HTMLEvents"); evt.initEvent("change", true, true); selections.dispatchEvent(evt); 

您可以附加脚本。 这需要大量的脚本附加,但你总是可以放置一个自定义通信事件,并且只注入一个好的脚本来监听该自定义事件和eval()事件数据。 如果没有CSP,它将起作用。

 var RunInThisContext = function(c){ try{ var code = document.createTextNode(c); var script = document.createElement('script'); script.type='text/javascript'; script.language='javascript'; script.appendChild(code); try{document.body.appendChild(script);}catch(e){document.head.appendChild(script);} }catch(e){ console.error('ERROR: '+e); }}; 

使用这样:

 RunInThisContext('('+(function(){ $('select').change(); }).toString()+'()); '); 

但请记住,您直接将其运行到页面中。 如果页面没有jQuery,你必须先包含它。