gpt4 book ai didi

javascript - 如何检查是否使用 javascript 加载了框架? - 不是加载,不是 iframe

转载 作者:数据小太阳 更新时间:2023-10-29 05:35:23 25 4
gpt4 key购买 nike

问题:较旧的知识库软件,无论出于何种原因,都有损坏的链接。它是一系列嵌套的框架。有些指向正确的目标,有些则没有,而且很多都坏了。当它不能顺利工作时,它使使用知识库变得很麻烦

我想要完成的事情:我想确定特定框架何时加载,然后解析框架的文档,用正确的 href 和目标替换 anchor 标记。

资源和限制:我可以访问一些 .aspx 页面。我的目标现在包含一个加载知识库文档的框架集。然而,此框架的 src 似乎不是实际的 .aspx 页面(物理文件)——不确定它是如何生成的,也不确定文档是如何存储的。我看到列出了 src,但无法在我有权访问的网络服务器上找到它。

基本信息:页面是使用 .aspx 加载的(我不太了解其中的部分内容,也无法访问更深入的内容)。 .aspx 页面有一个在加载页面时构建的框架集。

.aspx 文件中的示例 Framset 代码:

    <FRAMESET id="FrameSetMainView" runat="server" border="0" framespacing="0" frameborder="0">
<!-- This frame set is defined and generated in the code -->
</FRAMESET>

我尝试在 FRAMESET 中添加 onload标记(这会导致页面在尝试加载时出错)。框架集接管了主体,因此我无法将内联脚本添加到页面底部以使其在加载后运行。

此外,产品年龄的 b/c - 它被迫进入兼容模式。所以必须使用 IE7 等效支持。 (没有 addeventlistener 选项)

当前策略:我认为我可以开始工作,但感觉很花哨 - 将脚本添加到 <head> 中.类似的东西:

    <SCRIPT>
function load(){
var frameset = window.frames;
if(frameset.length > 0){ // frames have loaded - commence replacement

}else{ // frames not loaded
setTimeout(load,1000); // wait 1 sec, try again
}
}

load();
</SCRIPT>

其他解决方案?

最佳答案

使用onreadystatechange事件

是的,有可靠的方法可以解决这个问题,而无需求助于计时器或其他滴答。当页面加载时,为每个框架分配一个处理程序“onreadystatechange”事件。并且您还必须调用它一次以确保它应用于已加载的帧。下面的代码在 IE 兼容模式 5、7、8、9、10 中进行了测试,并按预期工作(在 IE11 中失败)。它也用慢速加载框架进行了测试,没有问题。

引用资料:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=7" />
<title>Demo</title>
<script type="text/javascript">
window.onload = function() {
for (var i = 0; i < window.frames.length; i++) {

(function(frame) {

// called whenever a frame is loaded or reloaded
frame.onreadystatechange = function() {
if (frame.readyState === 'complete') {
updateLinks(frame);
}
}

// call once to apply to already loaded frames
frame.onreadystatechange();

})(window.frames[i].frameElement);
}
}

// modify the links within the frame
function updateLinks(frame) {
var i, links, doc;
doc = frame.contentDocument || frame.contentWindow.document;
links = doc.getElementsByTagName('A');
for (i = 0; i < links.length; i++) {
// modify the links here
links[i].href += '?time=' + (new Date()).getTime();
}
console.info('modified ' + links.length + ' links in frame ' + frame.src);
}
</script>
</head>
<frameset cols="*,*">
<frame src="frameLeft.html">
<frame src="frameRight.html">
</frameset>

</html>

关于javascript - 如何检查是否使用 javascript 加载了框架? - 不是加载,不是 iframe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36633995/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com