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

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

我得到一个错误,指出顶部为空。在地方“顶”的使用“窗口”时,Firefox的加载我的脚本文本的iframe,但的GreaseMonkey是无法检测到它由于某种原因更新。是否有设置,我已经错过了莫名其妙的窗口位置的另一种方法?

编辑:我的脚本的用户访问特定业务的页面(第一个)。我的脚本加载到使用Firefox插件叫的GreaseMonkey该页面。我的脚本创建访问的页面的iframe,并加载我的网页(二)进入该iframe。的GreaseMonkey然后加载我的剧本到我的网页,检查我的网页上的值,看看是否脚本已被更新。如果脚本已经更新,我需要我的导航用户从他们最初访问该网站(记为“第一”)的距离,和到另一个(第三)网站(userscripts.org)。希望这清除了一些混乱。

有帮助吗?

解决方案

我终于发现的GreaseMonkey提供一个函数“GM_OpenInTab(URL)”,其将打开在Firefox与指定的URL的新选项卡。这让我的iframe中打开一个新的标签与更新脚本的GreaseMonkey更新的位置。虽然这不正是我一直在寻找的解决方案,它不出差错无缝工作。

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

感谢大家对你的输入。这有可能是莫名其妙的GreaseMonkey脚本沙箱,以防止这类行为可能被用于恶意目的。

〜的md5sum〜

其他提示

在两个位置必须具有相同的主机名(域)。你可能想使用parent代替top

您可以尝试以下(改编自东西我使用):

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

我曾多次与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>

unsafeWindow.parent.location.href = URL;在Greasemonkey的工作了我的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top