HTML锚定标记';s onclick属性不调用javascript函数
我们有一个DotNetNuke模块运行在DotNetNuke 5.4.4的一个实例中,安装在“服务器a”上,这是一台Windows Server 2008 R2标准机器,具有IIS 6.1和Internet Explorer 11 我们正在使用Internet Explorer 9从运行Windows Server 2008标准的“服务器B”访问我们的DotNetNuke模块 当我们在服务器B上访问模块时,单击具有HTML锚定标记';s onclick属性不调用javascript函数,javascript,html,asp.net,onclick,dotnetnuke,Javascript,Html,Asp.net,Onclick,Dotnetnuke,我们有一个DotNetNuke模块运行在DotNetNuke 5.4.4的一个实例中,安装在“服务器a”上,这是一台Windows Server 2008 R2标准机器,具有IIS 6.1和Internet Explorer 11 我们正在使用Internet Explorer 9从运行Windows Server 2008标准的“服务器B”访问我们的DotNetNuke模块 当我们在服务器B上访问模块时,单击具有onclick属性的锚定html元素时,就会出现问题 带有onclick的锚点类似
onclick
属性的锚定html元素时,就会出现问题
带有onclick的锚点类似于:
<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>
如您所见,我们有一个带有onclick属性的anchor元素,它应该在其中调用openwindowjavascript函数,然后返回false,因此单击anchor(浏览到href)的默认操作不会发生
当我们单击此链接时(仅在服务器B上),我们没有弹出窗口,OpenWindow函数中没有断点,浏览器通过打开一个新选项卡(View.aspx)导航到href。这向我表明,onclick属性引用的OpenWindow函数由于某种原因甚至没有运行,即使它在锚元素上,并且可以在任何其他服务器上运行
我试过的
我比较了服务器A DotNetNuke和本地开发人员DotNetNuke实例之间的安全设置、web.config文件和DotNetNuke设置,没有发现设置上的差异
我将服务器B Internet Explorer的安全设置与我的安全设置进行了比较,发现设置没有差异
根据对这个问题的评论,我尝试将锚标记改为span标记(删除href和target属性),我看到了相同的行为。它在服务器A和开发人员上工作,但现在在服务器B上不做任何事情我认为核心问题是onclick属性没有被识别,或者以某种方式被阻止。
我现在更进一步,将大多数..
标记更改为带有特定类的..
标记,然后将jQuery(…).live('click',…)
处理程序附加到这些标记上(使用jQuery 1.4.2)这允许单击工作,但我仍然没有解决为什么忽略onclick属性。
奇怪的是。。
如果我打开开发者工具(IE9),然后单击“编辑”按钮再次打开和关闭编辑模式,锚定标记和img标记上的所有onclick属性都会正常工作,直到我重新加载页面
如果我通过开发人员工具以任何方式手动编辑onclick处理程序,比如说删除返回false来自onclick处理程序的code>将起作用,但是如果我将设置为返回false代码>返回,使它看起来像我从未改变过任何东西,它再次停止工作
我想弄清楚的是
为了解决这个问题,我要检查什么东西,这让我很为难。我无法在我的开发人员机器上复制它,而且它也可以在服务器A上工作,因此代码工作得非常好。
我想一定有一个我可以俯瞰的地方,但在哪里?现在我不知道还有什么需要检查,我正在寻找想法。我没有确切的答案,但我可以告诉你发生了什么以及为什么会这样
这两台服务器的内容并不完全相同——也许它们指向不同的CDN,也许其中一台服务器的某个地方有一个JavaScript文件的旧文件——您必须逐一浏览它们
在某个地方,某个东西正在将onclick处理程序应用于所有锚定标记
起初,我认为它是附加到body元素并以链接为目标的,但我排除了这种可能性。您可以编辑HTML并保存它,然后链接工作,这意味着您正在分离附加到该链接元素的任何内容
我想:
- 从站点A保存整个网页
- 从站点B保存整个网页
- 对这两个目录运行
diff
工具
您是否尝试调用窗口。直接从onclick属性打开?可能是在单击链接时未加载函数,因此会产生错误,因此不会调用return false
,链接将继续其默认行为(在本例中,打开选项卡)
如果是这种情况,请查看该函数的加载顺序,或者尝试将其放置在代码的不同部分(可能在onload
事件中)
检查您的Internet选项中是否显示JS错误 这可能有点幼稚,但由于您以弹出窗口的形式打开一个窗口,因此可能会出现一个问题,即该站点的URL可能会被浏览器阻止。如果您只是更换,它应该一直工作
window.open(url, '', 'top=15,scrollbars=yes,menubar=no,height=800,width=800,resizable=yes,toolbar=no,location=no,status=no');
与
您是否尝试将标记修改为:
<a href='javascript:MyFunction(this);' data-url='YourUrl'>Name</a>
MyFunction: function(obj) {
var element = $(obj);
window.open(element.data("YourUrl"));
}
MyFunction:函数(obj){
变量元素=$(obj);
window.open(element.data(“YourUrl”);
}
请注意,如果用户的浏览器配置为将窗口作为选项卡打开,则没有解决方法。target=“_blank”是我所知道的实现这一点并通过GP强制执行浏览器行为的最佳方法 听起来好像不在您提供的代码范围内。您提到打开IE9开发工具可以让它工作,我建议尝试添加console-polyfill,类似于:
if(typeof(console)=="undefined") {
var console = {
log : function() {},
error : function() {},
debug : function() {}
};
}
以防万一您的一些代码正在向控制台输出内容,而JS代码在该事件发生后停止工作。可能是某个外部库,在加载后开始将内容输出到控制台-由于缓存设置和/或网络延迟,在不同的服务器上可能会有不同的工作方式
注意:要正确测试此功能,请记住在加载任何JS代码或导入任何外部库之前将其添加到脚本标记中。是否必须是当加载页面或单击服务器B上的链接时,控制台中是否有任何错误?您还尝试过手动运行OpenW吗
<a href='javascript:MyFunction(this);' data-url='YourUrl'>Name</a>
MyFunction: function(obj) {
var element = $(obj);
window.open(element.data("YourUrl"));
}
if(typeof(console)=="undefined") {
var console = {
log : function() {},
error : function() {},
debug : function() {}
};
}