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

标签 javascript jquery css facebook firefox-addon-sdk

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

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

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

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

有没有人知道该怎么做?

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

在关注元素后尝试点击:

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

将窗口位置设置为 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);

混合“点击”和“输入”方法:

$('[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') 这样的标识符。

以前,我尝试打开消息框的复杂得多的方法涉及实际在聊天搜索框中搜索,然后等待结果出现,然后选择并单击突出显示的个人(如果有的话)在结果中。问题是,搜索框从未将我的输入注册为“自然用户输入”,因此即使使用 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 页面上不起作用的原因解释如下: https://stackoverflow.com/a/20286152/5811984

关于javascript - 如何使用 jQuery 触发 Facebook 'New Message' 按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39068020/

相关文章:

javascript - 如何在光滑 slider 的垂直 slider 同步中使用箭头(上一个和下一个)保持主幻灯片和垂直幻灯片的高度相等?

javascript - cytoscape.js - 如何合并来自不同来源的同一节点的属性

html - 使用 flexbox 创建导航栏时如何避免右侧出现额外空间(justify-content : space-between/around) properties

javascript - 带有上一个下一个部分图像的全宽轮播 slider

html - 在 css 内容 Accordion 中添加滚动条

javascript - 使用用户脚本定义数组时更改数组内的值

javascript - Visual Studio 2013 环境声明中的 TypeScript

jquery - 我想在输入复选框上添加一些 css

javascript - 如何将元素高度附加为其他元素样式值

javascript - 检查单词是否与空格匹配