如何使用 jQuery 触发 Facebook 'New Message' 按钮?

How to trigger Facebook 'New Message' button using jQuery?

(这是我之前没有合适的代码示例时的转贴)

我一直在绞尽脑汁想弄清楚如何与 Facebook 的前端进行交互 ui。

我正在编写一个简单的 Firefox 附加组件,当它识别出您在 https://www.facebook.com/ 时,它会简单地运行一些 JavaScript/jQuery -- 纯粹是为了保持我的工作效率和不分心当我去 Facebook 时。

但无论如何,我一直在尝试简单地 select 聊天侧边栏右下角的 'New Message' 按钮。到目前为止,没有任何事件——焦点、点击、按键 'Enter'、转到该按钮的 href 等——有效。字面上就是这样,我只是想打开一个新的消息框,我的附加组件就完成了。但出于某种原因,无论 Facebook ui 在幕后施展什么黑魔法,那个该死的按钮就是按不下去!

有人知道该怎么做吗?

以下是我在脚本中尝试过的示例:

关注元素后尝试点击:

$('[data-tooltip-content="New Message"]').focus();
$('[data-tooltip-content="New Message"]').trigger('click');

将 window 位置设置为 href - 所做的只是将“#”附加到 url:

var href = $('[data-tooltip-content="New Message"]').attr('href');
window.location.href = href;

试图让它看起来像我在关注元素后按下 'enter':

$('[data-tooltip-content="New Message"]').focus();
var f = jQuery.Event("keypress");
f.which = 13;
f.keyCode = 13;
$('[data-tooltip-content="New Message"]').trigger(f);

混合使用 'click' 和 'enter' 方法:

$('[data-tooltip-content="New Message"]').focus();
$('[data-tooltip-content="New Message"]').trigger('click');
var f = jQuery.Event("keypress");
f.which = 13;
f.keyCode = 13;
$('[data-tooltip-content="New Message"]').trigger(f);

在用 Firebug 检查后,我什至使用了像 $('a#js_g') 这样的标识符。

以前,我尝试打开消息框的方法要复杂得多,实际上是在聊天搜索框中进行搜索,然后等待结果出现,然后再 selecting 并单击突出显示的结果中的个人(如果有的话)。问题是,搜索框从未将我的输入注册为 "natural user input",因此即使使用 keyup() 事件,更改输入框的值也不会触发对相关结果的搜索,并且之后2 秒后,输入框的值自行清除。

事情是这样的:

var searchChat = "something to search";
$('input._58al').focus();
$('input._58al').val(searchChat).keyup();
var e = jQuery.Event("keypress");
e.which = 13; //choose the one you want
e.keyCode = 13;
$("input._58al").trigger(e);
$('input._58al').focus();
$("input._58al").trigger(e);

//I set a timeout here, by encapsulating the following in a function, to wait for the results to show up

var header = $('div._225b').text();
var listItems = $('ul#js_3 li');
var selected = false
listItems.each(function(index, li) {//Basically, go down all the list of items and see if any of them are auto-selected; we just open that one, as facebook's default choice
    if ($(li).attr("aria-selected")) {
        $(li).trigger('click');
        selected=true;
    }
});

我在某处读到这可能是一个跨源问题,我的 Firefox 内容脚本被阻止了?但即使在我的 package.json 中更改权限后,也没有任何反应:

"permissions": {
    "cross-domain-content": ["https://www.facebook.com/"]
}

看来你不能在 Facebook 页面上使用 jQuery,所以你必须使用 vanilla js

document.querySelectorAll('[data-tooltip-content="New Message"]')[0].click()

https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelectorAll


jQuery 在 Facebook 页面上不起作用的原因解释如下: