HTML锚定标记';s onclick属性不调用javascript函数

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的锚点类似

我们有一个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的锚点类似于:

<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将起作用,但是如果我将
设置为返回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() {}
  };
}