Ситуация. Я пишу расширение chrome, которое работает на любой странице.
Проблема Вопрос: я не могу загрузить jQuery в Facebook, и я хотел бы понять, что происходит.
Гипотезы: у Facebook есть ультрасовершенствованные технологии, которые каким-то образом обнаруживают оба:
- Когда jQuery загружается через расширение chrome в якобы отдельный контекст исполнения JSVM, megamind Facebook как-то знает об этом якобы отдельном исполнении JSVM контекст и блокирует его.
-
, что jQuery загружается через script.src и блокирует его(когда я использовал CDN Google, который обслуживает HTTPS вместо jQuery, который не работает с методом 2, но недостаточно для ответ).
DATA
Как узнать, что jQuery не загружается?
I ⌘ ⌥ j, чтобы открыть консоль в Chrome. Когда я это сделаю:
> jQuery
>> ReferenceError : jQuery is not defined.
> $('body')
>> Error : Tried to get element "body" but it is not present on the page.
Как я могу загрузить jQuery в facebook?
Метод 1 (требуется, но не работает):
Через следующий код в файле manifest.json:
"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)
}
]
Метод 2 (работает, но недостаточно):
С помощью метода, описанного в этом SO-ответе (загрузить jQuery в консоль), изменен, чтобы разрешить правильный протокол:
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();
Резюме
Гипотеза 1 кажется очень маловероятной, потому что чрезмерное использование отдельных контекстов исполнения веб-браузера будет серьезной уязвимостью в безопасности (перерыв этой песочницы) и вряд ли будет санкционирован. Поэтому я, вероятно, параноик и игнорирую очевидное, которое, как мы надеемся, один из вас увидит.
Приложение (другой соответствующий код)
Все нестандартные .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;
};
Больше manifest.json:
"manifest_version" : 2,
"permissions" : [
"http://*/",
"https://*/",
"tabs",
"storage",
"unlimitedStorage"
],