我不知道为什么此链接不起作用,但是我有一个Javascript重定向(window.opener.location),我通过URL传递了许多变量,当这些变量包含撇号时遇到了问题。我在PHP中使用URLENCODE()构建链接,当我转储源代码时,它看起来像在做我所需要的,但是当我单击链接时,Safari和Chrome都抛出“意外标识符在'www'”错误。 / p>
这似乎告诉我JS链接仍在被当作是撇号而不是等效于%27的撇号?我使用的虚拟名称“ qqq'www qqq'www”的名字和姓氏都带有撇号,以便进行测试,以尽可能破坏其他内容。
这是我遇到问题的链接:
<a href="javascript:top.close();window.opener.location='../cust/maint_cust.php?action=del_are_you_sure&cust_id=249735&lname=Qqq%27www&fname=Qqq%27www'"><em>Yes</em></a>
但是,如果我将链接更改为使用onclick而不是HREF,它可以工作吗?我意识到这也是比href ='javascript:...'更好的编码方法。
<a href="#" onclick="top.close();window.opener.location='../cust/maint_cust.php?action=del_are_you_sure&cust_id=249735&lname=Qqq%27www&fname=Qqq%27www'"><em>Yes</em></a>
除了 where 之外,其他所有内容都是相同的,我进行了JS调用。这可能是由于在编码/解码时处理HREF和onclick的方式吗?可能是因为JS嵌入在HREF调用中,所以HREF在进行链接调用之前未对撇号进行编码?
任何对此行为的见解都会受到赞赏,因此我可以更好地了解这里的实际情况。是的,它有效,但是不知道为什么让我感到自己像一个更糟糕的开发人员...
谢谢!
答案 0 :(得分:0)
Your links do not have a > to end the starting <a
- and yes, do not use href="javascript:
Also if you need to encode, use encodeURIComponent and lastly do not try to close the window before changing the opener.
But why not name the opener and user a target and a setTimeout?
<a target="nameOfOpener"
href="../cust/maint_cust.php?action=del_are_you_sure&cust_id=249735&lname=Qqq%27www&fname=Qqq%27www"
onclick="setTimeout(function() {top.close()},100)"><em>Yes</em></a>
答案 1 :(得分:0)
浏览器对以'javascript:'开头的href属性进行特殊处理。在执行Javascript代码之前,将首先解码任何%xy编码(例如您的%27)。我检查了当前版本的Firefox和Chrome。我很想找到有关此功能的文档。
简单的答案是:如果您的Javascript代码包含%xy编码,请不要在href中使用“ javascript:”。
如果确实需要在href中使用“ javacript:”,请将URL放入javascript变量,然后在href的Javascript代码中引用该变量。
<script>
myURLwithEncodings = "../cust/maint_cust.php?action=del_are_you_sure&cust_id=249735&lname=Qqq%27www&fname=Qqq%27www";
</script>
<a href="javascript: window.opener.location=myURLwithEncodings; top.close();"><em>Yes</em></a>