我正在研究一些代码,在SO关闭问题弹出窗口中插入一个欺骗的链接:
当您在文本框中手动插入问题链接时会发生什么情况是某些JS启动并获取属于URL的问题.但是,当我使用javascript(Chrome扩展程序)将URL插入文本框时,SO javascript从未启动以检索问题.我用来插入欺骗网址的代码是:
$(document).on('click', '.cvhelper-dupelist li', function() {
var url = $('a', this).attr('href');
var $dupeBox = $('#duplicate-question');
$dupeBox.val(url);
});
上面的代码成功地在文本框中插入了链接,但是出于某种原因,SO javascript从未启动以检索问题.
我也试过以下可能会迫使它无济于事:
$dupeBox.change();
和
$dupeBox.keyup();
为了测试发生了什么,您可以打开关闭随机问题的dupe弹出窗口(如上所示)并运行:
$('#duplicate-question').val('https://stackoverflow.com/questions/8028957/headers-already-sent-by-php');
在浏览器控制台中.
最佳答案 我想我找到了一种方法,但它相当脆弱:
$dupeBox.data('events').keydown[1].handler({keyCode: 13})
这会触发此元素的第二个keydown事件处理程序.并为存根事件对象提供了一个keyCode.
UPDATE
找到了更好的方法:
您可以使用以下内容构造jQuery.Event对象:
var e = jQuery.Event("keydown", { keyCode: 64 });
并使用此对象触发事件:
$dupeBox.trigger(e)
问题是SO代码检查了事件对象中是否有东西:
e(d).keydown(c).bind("paste", null, function(a) {
a.which || c(this)
})