【问题标题】:problem Running Scripts on Facebook在 Facebook 上运行脚本的问题
【发布时间】:2011-02-13 23:14:43
【问题描述】:

大家好,所以我刚刚为 Google Chrome 制作了一个小油猴脚本,它应该可以删除 facebook 添加的烦人的新照片查看功能。它所做的只是从 URL 的末尾删除“&theater”。我的第一次尝试只是在一行中做到这一点。

if (window.location.toString().indexOf('www.facebook.com') >= 0) {
    window.location.href = window.location.href.replace(/(&theater)$/, '');
}

但这只会让页面不断重新加载,一遍又一遍地执行脚本。 所以我想我会将该代码放在页面加载时调用的函数中。我的代码现在看起来像这样:

window.onload = function()
{
if (window.location.toString().indexOf('www.facebook.com') >= 0) {
    window.location.href = window.location.href.replace(/(&theater)$/, '');
}
}

我的问题是,当您加载 facebook 页面时,window.onload 永远不会被调用。它适用于其他网站,(我在函数中放置了一个警报以检查它是否被调用)。有什么建议吗?

【问题讨论】:

  • 你试过 unsafeWindow.onload = function() { }; ?
  • alert(window.onload) 说什么?当我在 Facebook 上尝试时,我得到了一个功能。

标签: javascript google-chrome greasemonkey userscripts


【解决方案1】:

您已经创建了一个无限循环的刷新,因为即使您在重定向到的 URL 上也会刷新页面。你最好做这样的 if 语句:

if ((window.location.host === 'www.facebook.com') && window.location.pathname.indexOf('&theater') > -1) {
  // redirect here
}

【讨论】:

    【解决方案2】:

    难道你只被允许使用一个window.onload,而 Facebook 可能已经在使用它了?

    alert(window.onload)...

    【讨论】:

      【解决方案3】:

      如果 onload 有效,您仍然会有一个无限循环 - 只是在重新加载之间的时间更长。 :)

      在大多数情况下...为避免循环,请设置一个在加载之间仍然存在的标志。最简单的方法是创建一个 URL 参数。

      但是,在这种情况下,您可以只更改您正在搜索的内容(暂时)。

      类似:

      if ( /&theater/i.test (window.location.href) )
      {
          window.location.href = window.location.href.replace(/(&theater)$/, '');
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-26
        相关资源
        最近更新 更多