Chrome POST/GET数据影响内联JavaScript



我已经搜索了这里所有的chrome onclick问题,没有一个像我遇到的问题。

我有一个div,我把一个onclick事件(在PHP中)像这样…

$design_code = '<div class="skip" onclick="skipOffer2();">'.$design.'</div>';

在IE &FF这个很好。在Chrome中,它的工作时间大约为50%。当它不起作用时,我在Chrome上使用Firebug检查这个div,它显示一个空的onclick事件:

<div class="skip" onclick="">

我没有任何代码可以删除这个事件,覆盖它,或者对那个div做任何事情,再一次…这只发生在Chrome上。Chrome正在删除此事件。

为了增加更多的混乱,当我在onclick函数前加上"javascript:"时,它在Chrome中100%有效。

$design_code = '<div class="skip" onclick="javascript:skipOffer2();">'.$design.'</div>';

还有其他人遇到过这个问题吗?Chrome真的删除我的事件处理程序,为什么?最后,为什么要加上"javascript:"来解决这个问题?


更新1:这个问题实际上与从前一页传递过来的POST数据有关。我正在传递一个来自上一页的urlencoded字符串,其中包含文本"onclick%3D%22skipOffer2%28%29%22"。

在当前页面上,我根本不能使用这个onclick功能!如果我尝试使用onclick="skipOffer2()"Chrome将删除它,并留下一个空的onclick事件。

POST数据(甚至没有被使用)如何影响当前页面?有人能证实吗?

这是我的测试url: http://mattkeaveney.com/test1.php


更新2:GET数据也存在问题。

http://mattkeaveney.com/test2.php?test=onclick%253D%2522alertMe%2528%2529%2522

我在谷歌上搜索了"chrome bug onclick",有很多页关于这个问题的报告。至于原因,我认为谷歌仍在努力寻找答案。

您确实不希望通过GET或POST在页面上执行任意JS。这样做会打开跨站点脚本和许多其他安全漏洞。

Chrome可能会过滤掉JS以防止这些类型的攻击。提供了一个标题来绕过这个过滤,但你真的应该重新构建你的网站。

最新更新