【问题标题】:detecting location.href in a frame在框架中检测 location.href
【发布时间】:2011-12-07 22:07:56
【问题描述】:

当函数调用尝试检测框架的 location.href 时,我在访问我的网站的某些计算机上遇到了问题,而更改值没有问题。有问题的框架可能指向不同的站点,可以通过以下调用单击另一个框架中的选项来操作:

parent.frames[0].location.href="http://www.foo.com/bar.html";

在所有情况下都可以正常工作并将框架更改为适当的位置。但是,对于某些用户而言,随后尝试验证它是否位于特定位置会失败。我尝试通过以下方式验证当前帧位置:

if(parent.frames[0].location.href == "http://www.foo.com/bar.html")
{
    return true;
}

然而,对于我的一些用户来说,这会导致框架崩溃,并在 Firefox 浏览器(在 Web 开发人员/错误控制台下)中显示为“无法检测 location.href”。然而,对于使用完全相同的浏览器的其他用户来说,它工作得很好。

我的问题:

  1. 是否存在导致此错误的设置,客户端可以设置为允许检查 location.href 值?
  2. 是否有更可靠的方法来检查即使设置也能正常工作的位置?

我在网络搜索中看到的唯一一个看起来相关的是一个名为“firebug”的程序,但我的用户的客户端没有使用这个程序。

【问题讨论】:

  • @ephemient Gotcha,这可能与它有关,但它是 HTML DOM 中对同一服务器(相同域,相同端口)上另一个框架的服务器端调用,看起来对谁的影响有点随机(我知道这不是随机的,但不能说出共同点)

标签: javascript frames


【解决方案1】:

我在下面的代码中遇到了类似的问题,以打破框架:

function breakout_of_frame()
{

    if (parent.frames.length > 0) {
        parent.location.href = self.document.location
    }
}

我没有找到问题的根源,但我找到了一种解决方法来使事情正常进行:我增加了一点延迟。

    function sleep(milliseconds) {
      var start = new Date().getTime();
      for (var i = 0; i < 1e7; i++) {
        if ((new Date().getTime() - start) > milliseconds){
          break;
        }
      }
    }


function breakout_of_frame()
{
    sleep(500);
    if (parent.frames.length > 0) {
        parent.location.href = self.document.location
    }
}

希望对你有帮助!

【讨论】:

  • 请不要这样睡。有setTimeout,不锁浏览器。
【解决方案2】:

Firebug 对调试很有帮助。每当我使用 AJAX 或 JavaScript 时,我总是让 firebug 保持打开状态。 RE:检测框架中的页面位置,我个人会使用后端语言来读取 HTML 标头以检查框架中的页面详细信息。在 PHP 中,您可以使用 $_SERVER['PHP_SELF'] 等。要调试 JavaScript,我想在我的机器或虚拟机上重新创建问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2018-06-20
    • 1970-01-01
    • 1970-01-01
    • 2015-08-05
    • 2010-10-13
    • 2020-12-27
    相关资源
    最近更新 更多