我有一个页面托管在其他人的框架集中,但是它都在同一个域上(我的内容通过服务上传到他们的服务器)。然而,他们为什么使用框架集是另一天的争论。他们不会改变他们的标记,所以我必须找到一个可以在我的代码中工作的解决方法。我在我的测试用例中发现了一个奇怪的问题,如果我能解决它可能会对我有所帮助。像往常一样,这只是 IE 中的一个问题。
包装框架看起来像这样(带有未引用的属性,是的):
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN">
<HTML>
<HEAD>
<TITLE>foo</TITLE>
<META content="text/html; charset=UTF-8" http-equiv=Content-Type>
<META content=IE=EmulateIE8 http-equiv=X-UA-Compatible>
</HEAD>
<FRAMESET frameSpacing=0 cols=8,*,8 frameBorder=1>
<FRAME id=blackleft src="black.htm" name=blackleft scrolling=no>
<FRAME id=content marginHeight=0 src="button.html" name=ScormContent marginWidth=0>
<FRAME id=blackright src="black.htm" name=blackright scrolling=no>
</FRAMESET>
</HTML>
我的测试用例页面(button.html)如下所示:
<!DOCTYPE html>
<html><head>
<meta http-equiv=X-UA-Compatible content="IE=Edge">
<title>test</title>
</head>
<body>
<section>
<a href="javascript:alert('hello world');">
<button>pressing me works unless you are in a frameset</button>
</a>
</section>
<section>
<a href="#" onclick="alert('hello world');">
<button>Pressing me always works</button>
</a>
</section>
</body>
</html>
我想知道为什么在框架集中使用第一个按钮在 IE9 中没有响应 - 独立运行页面会产生一个可点击的按钮。
关于 doctypes 和 x-ua 兼容技巧的大量阅读让我比以往任何时候都更加困惑,我无法弄清楚我应该做什么。如前所述,我不能以任何方式更改框架集的标记,因此为了使我的代码能够正常工作(它依赖于诸如 beforeunload 和 unload 事件之类的东西,以便在页面导航时传达数据以保存 - 这不会在框架集中运行时工作)。我的直觉告诉我,按钮示例显示我接近潜在问题,互联网告诉我这与 x-ua 兼容标签和怪癖模式有关,但有关该主题的大量阅读并没有让我受益一个解决方案...例如,如果我选择强制 IE9 进入(比如说)IE7 兼容模式,那么我所有的页面样式工作都会消失。