【发布时间】:2016-08-21 19:21:39
【问题描述】:
(这是一个转贴,之前我没有合适的代码示例)
我一直在琢磨如何与 Facebook 的前端 ui 交互。
我正在编写一个简单的 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;
试图让它看起来像我在关注元素后按了“输入”:
$('[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/"]
}
【问题讨论】:
-
感谢您努力写出比您最初的问题更好的问题。另一次,处理原始问题的“正确”方法是对其进行编辑。如果您有(即,如果该内容被编辑为此内容),我会撤回我的投票以关闭,删除我的反对票并删除一些要求更多信息的 cmets。我可能会投票(就像我在这里一样)。另一方面,许多人观看新的问题提要,特别是对于热门标签,在最初的匆忙中提出一个高质量的问题会导致更好的响应。
标签: javascript jquery css facebook firefox-addon-sdk