Situation : I am writing a chrome extension that works on any page.
Problem Question : I can not load jQuery into Facebook and I would like to understand what is happening.
Hypotheses : Facebook possess some ultra advanced tech that somehow detects both :
- When jQuery is loaded via a chrome extension in an
ostensibly separate JSVM execution context, the Facebook megamind
somehow knows about this ostensibly separate JSVM execution
context, and blocks it.
- that jQuery is loaded via script.src and blocks it
(when I used the Google CDN which serves over HTTPS instead of the
jQuery one which doesn't method 2 works, but is not sufficient for
answer).
DATA
How do I know jQuery is not loading?
I ??j to bring up the console in Chrome. When I do :
> jQuery
>> ReferenceError : jQuery is not defined.
> $('body')
>> Error : Tried to get element "body" but it is not present on the page.
How do I attempt to load jQuery in facebook?
Method 1 (required but fails):
Via the following code in the manifest.json file :
"content_scripts" : [
{
"matches" : ["<all_urls>"],
"js" : [
"javascript/jq/jquery-1.9.1.min.js",
"javascript/jq/non-standard.js"
],
"all_frames": true // (or false, same failure)
}
]
Method 2 (works, but insufficent):
Via the method described in this SO answer (load jQuery into console), modified to permit the correct protocol :
var jq = document.createElement('script');
jq.src = "//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js";
document.getElementsByTagName('head')[0].appendChild(jq);
jQuery.noConflict();
Summary
Hypothesis 1 seems very unlikely, because over-riding the separate execution contexts of a web browser would be a major security vulnerability (break that sandbox), and not likely to be sanctioned. Therefore, I am probably being paranoid and overlooking the obvious, which hopefully one of you will see.
Appendix (other relevant code)
All of non-standard.js :
$.fn.in_groups_of = function( countPerGroup ) {
var groups = [], offset = 0, $group;
while ( ($group = this.slice( offset, (countPerGroup + offset) )).length ) {
groups.push( $group );
offset += countPerGroup;
}
return groups;
};
More of manifest.json :
"manifest_version" : 2,
"permissions" : [
"http://*/",
"https://*/",
"tabs",
"storage",
"unlimitedStorage"
],
See Question&Answers more detail:
os