IE href =“javascript:customFunction()”没有在第一帧加载时触发

时间:2017-03-22 16:47:11

标签: javascript internet-explorer frameset

我有一个自定义日期选择器弹出窗口,有时在IE中不起作用。它适用于Chrome和Edge。

代码看起来像这样:

<frameset>
    <frame>Buttons for next/prev month/year</frame>
    <frame>This is the actual calendar that gets redrawn when the above buttons are used
        <a href="javascript:parent.opener.setDate(1);">1</a> //there's a different anchor tag for each day of the month
    </frame>
<frameset>

所以这里有点奇怪。我们有两个网络,称之为新旧。旧的可能有很多无证的全球政策变化,新的可能接近政府标准。这适用于旧网络上的任何浏览器,但不适用于新网络上的IE(11)。它适用于Edge。此外,如果顶部框架按钮用于选择下一个/上个月,或仅选择“今天”按钮,则所有底部框架锚定链接都能正常工作。没有控制台错误/警告,网络监视器中没有任何内容显示请求返回错误代码,点击只是不注册。我在customFunction()中放置一个断点,当链接不起作用时它不会中断,但是如果链接可以工作,它将会中断。

对我来说唯一看起来很奇怪的事情是整个弹出窗口的代码看起来像:

str = "<frameset><frame name='topFrame' " + 
    "src='javascript:parent.opener.drawTop'></frame><frame name='bottomFrame' "+
    "src='javascript:parent.opener.drawBottom'><frame</frameset>"

document.write(str);

我确实检查过,当使用prev / next / etc按钮时重绘底部框架的代码与第一次加载时调用的函数相同。

然而,看起来很奇怪的是,在第一次加载时,DOM检查器会显示所有内容(顶部框架,底部框架,包括每月每天的所有单独数字等),但调试器(F12工具)不会不显示用document.write(str)加载的代码;线。为了能够看到该代码并设置断点,我必须使用prev / next按钮,然后在Debugger中显示另一个.html文件,该文件具有与DOM匹配的构造HTML。

3 个答案:

答案 0 :(得分:4)

试试这个:

1)

<a href="javascript:parent.opener.setDate(1); void(0);">1</a>

2)

<a href="javascript:function(){parent.opener.setDate(1); return false;}">1</a>

3)

<a href="#" onclick="javascript:parent.opener.setDate(1); return false;">1</a>

4)检查你的代码。也许你的框架具有属性&#39; sandbox&#39;。该属性可以阻止javascript。例如:

 <iframe src="URL" sandbox>

答案 1 :(得分:3)

除了Nutscracker的伟大建议之外,我还有一些模糊的问题与document.write和事件处理程序没有附加在IE中。 ConnorsFan评论的问题可能是这里的原因,但您也可以尝试:

document.body.innerHTML = '<frameset><frame name="topFrame" ' + 
'src="javascript:parent.opener.drawTop"></frame><frame name="bottomFrame" '+
'src="javascript:parent.opener.drawBottom"><frame></frameset>'

您可能还想检查这个代码是否实际被调用,也许正常工作的弹出窗口是通过prev / next按钮从其他地方加载的,这只是一些剩余的东西。

答案 2 :(得分:0)

如果您的onclick函数返回false,则取消默认浏览器行为。就这样:

<a href='http://www.google.com' onclick='return check()'>check</a>

<script type='text/javascript'>

function check()
{
    return false;
}

这意味着您可以将JavaScript函数设置为onclick事件,只需将锚标记链接回您所在的页面 - 因为当您单击它时它不会重定向您但需要{{ 1}}属性。