1

(this is a repost, from earlier when I didn't have appropriate code examples)

I've been at my wit's end trying to figure out how to interact with Facebook's front-end ui.

I'm writing a simple Firefox add-on that simply runs some JavaScript/jQuery when it recognizes you're on https://www.facebook.com/ -- just purely for purposes of keeping myself productive and not-distracted when I do go on Facebook.

But anyways, I've been trying to simply select the 'New Message' button all the way in the bottom-right corner of the chat side-bar. And no events – focus, click, keypress 'Enter', going to the href of that button, etc. – has worked so far. That's literally it, I just want to open up a new message box, and my add-on will be done. But for some reason, whatever black magic Facebook's ui has got going on behind-the-scenes, that damn button just won't press!

Does anyone have any ideas of what to do?

The following are examples of what I've tried in my script:

Trying to click after focusing on the element:

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

Setting the window location to the href -- all that did was append '#' to the url:

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

Trying to make it look like I pressed 'enter' after focusing on the element:

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

Mixing both 'click' and 'enter' approaches:

$('[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);

I even used identifiers like $('a#js_g') after inspecting with Firebug.

Before, my much more complicated way of trying to open up a message box involved actually searching in the chat search-box, and then waiting for the results to show up before selecting and clicking the highlighted individual (if there were any) in the results. The problem was, the search-box never registered my input as, I guess, being "natural user input", so changing the input box's value didn't trigger a search for relevant results, even with the keyup() event, and after 2 seconds, the input-box's value just cleared itself.

It went something like this:

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;
    }
});

I read somewhere that it might have been a cross-origin issue, with my Firefox content script being blocked? But even after changing permissions like so in my package.json, nothing happened:

"permissions": {
    "cross-domain-content": ["https://www.facebook.com/"]
}
vawd_gandi
  • 85
  • 6
  • 1
    Thank you for putting out the effort to write a much better question than your originally one regarding this issue. Another time, the "correct" way to deal with the original question would have been to edit it. If you had (i.e. if that one was edited to be this content), I would have retracted my vote to close, removed my down-vote & deleted some comments asking for more info. I probably would up-vote (as I have here). On the other hand, many people watch the new question feeds, particularly for popular tags, having a good quality question for that initial rush results in much better response. – Makyen Aug 21 '16 at 21:03

1 Answers1

1

Looks like you can't use jQuery on Facebook pages, so you have to use vanilla js

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

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


The reason why jQuery does not work on Facebook pages explained here: https://stackoverflow.com/a/20286152/5811984
Community
  • 1
  • 1
Minderov
  • 521
  • 1
  • 5
  • 20