我们在运行DotNetNuke 5.4.4实例的DotNetNuke模块中,安装在“Server A”上,这是一台带有IIS 6.1和Internet Explorer 11的Windows Server 2008 R2标准机器。我们从“Server B”访问我们的DotNetNuke模块,该服务器运行Windows Server 2008标准版,使用Internet Explorer 9。
当我们在从Server B访问模块时单击具有onclick属性的锚html元素时,会出现问题。
带有onclick的anchor类似于:
正如您所看到的,我们有一个锚元素,其中包含一个onclick属性,它应该调用OpenWindow javascript函数,然后返回false,以便不发生单击锚(浏览到href)的默认操作。
然而,当我们单击此链接(仅在B服务器上)时,我们没有弹出窗口,OpenWindow函数中断点也没有被命中,并且浏览器通过打开一个新标签页(View.aspx)导航到href。这表明我引用的onclick属性的OpenWindow函数由于某种原因甚至都没有运行,尽管它在锚元素上,并且在任何其他服务器上都可以工作。
我已经尝试过的内容:
我比较了Server A DotNetNuke和我的本地开发者DotNetNuke实例之间的安全设置、web.config文件和DotNetNuke设置,并没有发现设置上的任何差异。
我比较了服务器B的Internet Explorer安全设置和我的安全设置,没有发现设置上的任何差异。
根据这个问题的评论建议,我试图将锚标记更改为span标记(删除了href和target属性),并且我看到了相同的行为。它在Server A和Dev上工作,但现在在Server B上什么也不做。我认为核心问题是onclick属性要么无法被识别,要么被阻止了。
我现在更进一步地将大多数...标记更改为具有特定类的...标记,然后使用jQuery 1.4.2将它们附加到jQuery(...).live('click', ...)处理程序上。这使得点击可以工作,但我仍然没有解决onclick属性被忽略的原因。
奇怪的是...
如果我打开开发人员工具(IE9),然后单击“编辑”按钮以打开和关闭编辑模式,所有锚标记和img标记上的onclick属性都会开始正常工作,直到重新加载页面。
如果我手动通过开发人员工具编辑onclick处理程序,例如删除onclick处理程序中的return false;,它将起作用,但如果我将return false;放回去,使其像我从未更改过一样,它就再次停止工作。
我试图弄清楚的问题:
我在检查这个问题时遇到了困难。我无法在我的开发者机器上复制它,并且在Server A上也可以工作,所以代码完全正常。我认为必须有一个设置我忽略了,但是在哪里?我不知道还要检查什么,我正在寻找想法。
当我们在从Server B访问模块时单击具有onclick属性的锚html元素时,会出现问题。
带有onclick的anchor类似于:
<a onclick='OpenWindow("/DotNetNuke/DesktopModules/Module/View.aspx?dt=%c2%b2%c2");return false;'
href="http://000.00.0.0/DotNetNuke/DesktopModules/Module/View.aspx?dt=%c2%b2%c2"
target='_blank'
jQuery1431968126278="42">Doc name (SSN-SS-SSNN)</a>
而OpenWindow函数的定义如下
function OpenWindow(url) {
window.open(url, '', 'top=15,scrollbars=yes,menubar=no,height=800,width=800,resizable=yes,toolbar=no,location=no,status=no');
}
正如您所看到的,我们有一个锚元素,其中包含一个onclick属性,它应该调用OpenWindow javascript函数,然后返回false,以便不发生单击锚(浏览到href)的默认操作。
然而,当我们单击此链接(仅在B服务器上)时,我们没有弹出窗口,OpenWindow函数中断点也没有被命中,并且浏览器通过打开一个新标签页(View.aspx)导航到href。这表明我引用的onclick属性的OpenWindow函数由于某种原因甚至都没有运行,尽管它在锚元素上,并且在任何其他服务器上都可以工作。
我已经尝试过的内容:
我比较了Server A DotNetNuke和我的本地开发者DotNetNuke实例之间的安全设置、web.config文件和DotNetNuke设置,并没有发现设置上的任何差异。
我比较了服务器B的Internet Explorer安全设置和我的安全设置,没有发现设置上的任何差异。
根据这个问题的评论建议,我试图将锚标记更改为span标记(删除了href和target属性),并且我看到了相同的行为。它在Server A和Dev上工作,但现在在Server B上什么也不做。我认为核心问题是onclick属性要么无法被识别,要么被阻止了。
我现在更进一步地将大多数...标记更改为具有特定类的...标记,然后使用jQuery 1.4.2将它们附加到jQuery(...).live('click', ...)处理程序上。这使得点击可以工作,但我仍然没有解决onclick属性被忽略的原因。
奇怪的是...
如果我打开开发人员工具(IE9),然后单击“编辑”按钮以打开和关闭编辑模式,所有锚标记和img标记上的onclick属性都会开始正常工作,直到重新加载页面。
如果我手动通过开发人员工具编辑onclick处理程序,例如删除onclick处理程序中的return false;,它将起作用,但如果我将return false;放回去,使其像我从未更改过一样,它就再次停止工作。
我试图弄清楚的问题:
我在检查这个问题时遇到了困难。我无法在我的开发者机器上复制它,并且在Server A上也可以工作,所以代码完全正常。我认为必须有一个设置我忽略了,但是在哪里?我不知道还要检查什么,我正在寻找想法。
<script>
标签中以type="text/html"
的形式包含,并且我们使用parseTemplate.js解析该HTML(在我开始工作之前就已经存在,所以不知道它来自哪里),parseTemplate.js会将JSON对象数据插入到我们放置代码块的位置,例如<#= ViewLink #>,这将成为上述整个锚点标签。 - Zack