这个简单的代码在Facebook页面上不起作用。此代码仅在我刷新the page时发出警报。如果我用鼠标从my Facebook profile转到该页面;脚本停止工作。
没有警报或错误。 :(
看起来整个脚本在刷新之前不起作用。
// ==UserScript==
// @name Purge My Facebook
// @namespace http://www.arda.com
// @description test
// @include https://*.facebook.com*
// @include http://*.facebook.com*
// @version 1
// ==/UserScript==
window.setTimeout (isParent, 500);
function isParent () {
if (window.self == window.top) {
alert ("main window");
} else
window.setTimeout (isParent, 500);
}
我还试过这个,其中包括:
// ==UserScript==
// @name Purge My Facebook
// @namespace http://www.arda.com
// @description test
// @include http://www.facebook.com/*/allactivity*
// @include https://www.facebook.com/*/allactivity*
// @version 1
// ==/UserScript==
try{
if (window.self == window.top)
alert(document.domain+"\nmain window");
else
alert(document.domain+"\nin a iframe");
}
catch(e){
alert(document.domain+"\nHad a problem:\n"+e);
}
答案 0 :(得分:4)
问题是AJAX问题。当您键入URL或刷新页面时,您的脚本将起作用。当您点击"活动日志"按钮,脚本没有。 iframe不是您报告的症状的一个因素。
这是因为点击该链接,从不加载新页面;它会触发代替部分内容的AJAX调用,使其看起来像一样新页面,但它不是。
所以,如果你想让你的脚本触发" new" "主页",您必须使用this answer中的技术。
在Facebook的情况下,通常唯一改变的是报告的URL(但不触发hashchange!),以及#mainContainer
div的内容。
您还必须@include
所有FB页面,因为https://www.facebook.com/*/allactivity*
之类的页面通常只能通过AJAX访问,因此您的脚本需要在上一页页面上运行。
此脚本将解决您问题中提出的问题:
// ==UserScript==
// @name Purge My Facebook
// @namespace http://www.ardaterekeci.com
// @description test
// @include http://www.facebook.com/*
// @include https://www.facebook.com/*
// @version 1
// ==/UserScript==
var pageURLCheckTimer = setInterval (
function () {
if ( this.lastPathStr !== location.pathname
|| this.lastQueryStr !== location.search
|| this.lastPathStr === null
|| this.lastQueryStr === null
) {
this.lastPathStr = location.pathname;
this.lastQueryStr = location.search;
gmMain ();
}
}
, 222
);
function gmMain () {
if (window.self === window.top)
alert ('"New" main (top) page loaded.');
else
alert ('"New" iframed page loaded.');
}
但是,,因为页面是大量的AJAX,你会发现在页面首次加载时触发几乎总是太早。
聪明的做法是在您真正关心的网页的特定部分使用waitForKeyElements
。 (未在问题。)
Here's an example of using waitForKeyElements
.请注意,要在Chrome中使用@require
,您必须使用Tampermonkey(无论如何都应该使用)。