我试图访问此网站
<script type="text/javascript">
function setCanvasSize()
{
FB.Canvas.setAutoResize(false);
FB.Canvas.setSize({ "width": 760, "height": 730 });
}
window.fbAsyncInit = function() {
setCanvasSize();
}
$(document).ready(function() {
setCanvasSize();
});
主页上的
,但FB未定义,因为我的主机文件中已阻止Facebook。
每当我尝试访问它时,它会发出错误Uncaught ReferenceError: FB is not defined
并看到一个空白页。
我尝试使用页面的greasemonkey脚本设置var FB = 0;
,但它不起作用。有谁知道我怎么能解决这个问题?反正有没有用greasemonkey从页面中删除这个javascript?
答案 0 :(得分:1)
我认为别无选择,只能在不存在时“覆盖”此对象。
将此代码放在页面的最后:
if (typeof FB == "undefined" || !FB) {
FB = {
Canvas: {
setAutoResize: function() {},
setSize: function() {}
}
};
}
这样$(document).ready()
中的代码将使用此虚拟对象,不会崩溃。
答案 1 :(得分:0)
window.setCanvasSize = '';
function setCanvasSize()
{
try {
FB.Canvas.setAutoResize(false);
FB.Canvas.setSize({ "width": 760, "height": 730 });
}
catch (e) {}
}
试试这个
答案 2 :(得分:0)
我在这里看到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,但这些都没有奏效 - 可能由于时间问题而再次发生。我也可能稍后重新审视。)另外,请务必填写一份{ {1}}和@namespace
。
首先不需要检查现有的@include
变量,因为此时它确实无法存在 - 因此不必担心覆盖某些内容。
否则,我可以立即想到的唯一解决方法是Firefox扩展,在页面加载之前在页面范围内提供模拟FB
对象。
答案 3 :(得分:0)
您需要同时使用@run-at document-start
和unsafeWindow
:
// ==UserScript==
// @name _Ensure that setCanvasSize or FB is defined
// @include YOUR_SITE/YOUR_PATH
// @run-at document-start
// ==/UserScript==
unsafeWindow.FB = {
Canvas: {
setSize: function () {},
setAutoResize: function () {}
}
};
请注意,GM脚本将在DOM可用之前开始运行,因此尝试DOM操作甚至alert()
或console.log()
都会导致脚本无声地失败。
只是设置JS对象,就像我给出的脚本一样,但是很好。