Tình huống: Tôi đang viết tiện ích mở rộng chrome hoạt động trên bất kỳ trang nào.Tại sao jQuery không tải trong Facebook?
Câu hỏi vấn đề: Tôi không thể tải jQuery vào Facebook và tôi muốn hiểu điều gì đang xảy ra.
Hypotheses: Facebook sở hữu một số công nghệ siêu cao cấp mà bằng cách nào đó phát hiện cả hai:
- Khi jQuery được nạp thông qua một phần mở rộng chrome trong một riêng biệt JSVM bối cảnh vẻ thực hiện, Facebook Megamind bằng cách nào đó biết về điều này có vẻ bề ngoài riêng biệt Thực thi JSVM ngữ cảnh và chặn nó.
-
rằng jQuery được nạp qua script.src và khối nó(khi tôi sử dụng CDN Google phục vụ qua HTTPS thay vì jQuery một mà không phương pháp 2 công trình, nhưng không đủ để câu trả lời).
DỮ LIỆU
Làm sao tôi biết jQuery không tải?
tôi ⌘⌥j để đưa lên console trong Chrome. Khi tôi làm:
> jQuery
>> ReferenceError : jQuery is not defined.
> $('body')
>> Error : Tried to get element "body" but it is not present on the page.
Làm thế nào để tôi cố gắng để tải jQuery trong facebook?
Phương pháp 1 (bắt buộc nhưng thất bại):
Qua đoạn mã sau vào file 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)
}
]
Phương pháp 2 (công trình, nhưng insufficent):
Thông qua phương pháp được mô tả trong câu trả lời SO này (load jQuery into console), được sửa đổi để cho phép giao thức chính xác:
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();
Tóm tắt
Giả thuyết 1 có vẻ rất khó xảy ra, bởi vì quá cưỡi bối cảnh thực hiện riêng biệt của một trình duyệt web sẽ là một lỗ hổng bảo mật lớn (phá vỡ sandbox đó), và không có khả năng bị xử phạt. Vì vậy, tôi có lẽ đang hoang tưởng và nhìn thấy rõ ràng, mà hy vọng một trong các bạn sẽ thấy.
Phụ lục (mã khác có liên quan)
Tất cả phi 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 của manifest.json:
"manifest_version" : 2,
"permissions" : [
"http://*/",
"https://*/",
"tabs",
"storage",
"unlimitedStorage"
],
Vì vậy, tiện ích mở rộng của bạn đang hoạt động trên bất kỳ trang web nào khác ngoài Facebook? –
@SimonBoudrias Câu hỏi hay. Thực ra là không. Tôi chỉ kiểm tra trên Stackoverflow (nhưng có vẻ như họ tải jQuery của riêng mình, vì vậy tôi nhận được một dương tính giả). Tiện ích của tôi cũng không hoạt động trên Google. Điểm tốt! Có lẽ tôi cần phải thay đổi tiêu đề của câu hỏi, mặc dù điều đó có thể quá mất tập trung. –
Đó là chức năng $ mà họ thực hiện rất buồn cười, nó chỉ giả vờ như nó làm một cái gì đó nhưng thực sự nó chỉ là một thông báo lỗi lừa dối. Có lẽ họ đang cố gắng để đám đông người cố gắng đào sâu vào lòng can đảm của facebook. – brysgo