Я вижу 2 проблемы здесь.
Во-первых, установка FB = 0
бы предотвратить ошибку доступа FB.Canvas
, но любые аксессоров к FB.Canvas
- такие, как FB.Canvas.setAutoResize
будет по-прежнему бросать ошибку.
Во-вторых, все это, вероятно, происходит до выполнения сценария GreaseMonkey.
Edit:
Вы должны использовать @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
объекта в области видимости страницы до страницы равномерной загрузки.
Если кто-то разместил указанный файл js на CDN, тогда ссылайтесь на него. Например, google сделал для jquery. –