JavaScript iframe破坏

时间:2009-10-29 19:31:59

标签: javascript iframe greasemonkey

在某些情况下,我有一个在iframe中打开的网页。当它被加载到iframe时,我需要它将窗口位置设置为资源以下载文件(所有这些都是为了尝试更新GreaseMonkey脚本......所有这些都是合法的,顺便说一下)。不幸的是,当我这样做时:

top.location.href = "http://userscripts.org/...";

我收到一条错误,指出top为null。当使用“window”代替“top”时,firefox会将我的脚本文本加载到iframe中,但由于某种原因,GreaseMonkey无法将其检测为更新。还有另一种设置窗口位置的方法,我以某种方式错过了吗?

编辑:我的脚本用户访问特定商家的页面(第一个)。我的脚本使用名为GreaseMonkey的firefox插件加载到该页面。我的脚本在访问过的页面上创建了一个iframe,并将我的页面(第二个)加载到该iframe中。然后GreaseMonkey将我的脚本加载到我的页面上,该页面检查我页面上的值以查看脚本是否已更新。如果脚本已更新,我需要将用户从他们最初访问的站点(标记为“第一个”)和另一个(第三个)站点(userscripts.org)导航。希望这可以解决一些困惑。

5 个答案:

答案 0 :(得分:3)

我终于发现GreaseMonkey提供了一个函数“GM_OpenInTab(url)”,它在firefox中使用指定的url打开一个新选项卡。这允许我的iframe打开一个新选项卡,其中包含要更新GreaseMonkey的更新脚本的位置。虽然这不是我正在寻找的解决方案,但它可以无缝地工作而没有错误。

GM_openInTab("http://userscripts.org/...") ;

感谢大家的投入。 GreaseMonkey可能以某种方式沙箱脚本来防止可能用于恶意目的的那种行为。

〜的md5sum〜

答案 1 :(得分:1)

这两个位置必须具有相同的主机名(域)。您可能希望使用parent代替top

答案 2 :(得分:1)

您可以尝试以下内容(根据我使用的内容改编):

function checkWebPage() {
    try {
        if (top != self) {
            top.location.href = "http://userscripts.org/...";
        } else {
            self.location.href = "http://userscripts.org/...";
        }
    } catch (e) {}
}

答案 3 :(得分:0)

我用iframe工作过几次,我发现使用文档状态更安全。我将通过示例传递代码。

在这个例子中,我使用的是jQuery,但不是功能所必需的。

<head>
<script>
(function($) {
 $.documentCtrolState = function(d,f,t)
 {
    try{
      t=(typeof(t)=="undefined")?100:t;
      if (d.readyState=="complete") //the document has been completely loaded, successfully or unsuccessfully
         f(true);
      else
         setTimeout(function(){$.documentCtrolState.call(this,d,f,t);}, t);
    }catch(ex){
         f(false, ex);
    }
 };
})(jQuery);

$(function(){

   $myIframeRef = $(document.myIFrame);
   $myIframeRef.attr("src", "mypage.php");

   $.documentCtrolState($myIframeRef.window.document, ThenLoadIFrame, 100);

});

ThenLoadIFrame = function(state, ex)
{
   alert("State " + state);
}


</script>
</head>
<body>
<iframe src="" id="myIFrame"></iframe>
</body>

答案 4 :(得分:0)

unsafeWindow.parent.location.href = url;为我的Greasemonkey工作。