JavaScript的iFrame突破
-
22-07-2019 - |
题
在某些情况下,我有得到的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的工作了我的。