Здесь я вижу 2 вопроса.
Во-первых, установка FB = 0
предотвратит ошибку при доступе к FB.Canvas
, но любые методы доступа к FB.Canvas
, например FB.Canvas.setAutoResize
, все равно будут выдавать ошибку.
Во-вторых, все это, вероятно, происходит до того, как ваш скрипт GreaseMonkey выполняется.
Изменить:
Вам нужно использовать @run_at document_start
. Подробнее см. http://wiki.greasespot.net/Metadata_Block#.40run-at и https://github.com/greasemonkey/greasemonkey/issues/1103. Доступно с GreaseMonkey 0.9.8+. Затем используйте фиктивные объекты, предоставленные Shadow Wizard в его ответе.
Также убедитесь, что вы правильно взаимодействуете с окном контента, а не с областью действия GreaseMonkey. Это работает, но согласно встроенным комментариям и комментариям ниже - это требует некоторых мер безопасности!
// ==UserScript==
// @name Mock Facebook
// @namespace ...
// @include ...
// @run-at document-start
// ==/UserScript==
// DO NOT DO THIS - EXAMPLE ONLY - SEE http://wiki.greasespot.net/UnsafeWindow
unsafeWindow.FB = {
Canvas: {
setAutoResize: function(){},
setSize: function(){}
}
};
Требуется дополнительная работа, чтобы обойти небезопасные unsafeWindow
, но это рабочий пример, который, как мы надеемся, может быть должным образом расширен вами или кем-то еще. (Я пробовал оба http://wiki.greasespot.net/Content_Script_Injection и http://wiki.greasespot.net/Content_Script_Injection,, но ни один из них не сработал - возможно, снова из-за проблем со временем. Я также могу вернуться к этому позже.) Кроме того, обязательно заполните соответствующие @namespace
и @include
.
Нет необходимости сначала проверять существующую переменную FB
, так как на самом деле не существует способа, которым она могла бы существовать в противном случае - поэтому нет необходимости перезаписывать что-либо.
В противном случае, единственное решение, о котором я могу сразу подумать, - это расширение Firefox, которое предоставляет фиктивный FB
объект в области видимости страницы даже до загрузки страниц.