2012-02-02 40 views
0

我有一个JavaScript链接如下:做一个链接非安全

<a href="#" onclick="window.open('TrackPackage.asp?track=235&ship=OTHER&ShippingMethod=1', '', 'location=1,menubar=1,scrollbars=1,status=1,resizable=1,width=635,height=460'); return false;"> 
<span class="PageText_L288n">TRACK YOUR PACKAGE</span> 
</a> 

但是,它正在从一个安全的友情链接,因此它成为一个安全的页面。不幸的是,这给我造成了一个问题,因为一个不安全的表单在到达页面时会自动提交。他们得到提示:此表单不安全地提交。这些页面上没有任何敏感数据,所以我确实不需要首先确保页面的安全。是否有HTML或JavaScript中的属性,可能会导致链接不安全。我无法真正修改链接本身,因为它是一个动态链接。

不过,我确实相信一些jQuery可以在TrackPackage.asp之前添加http://www.example.com/。我想这是可以接受的,但我更喜欢某种只会使链接不安全的属性。由于

+0

你搞糊涂了哪些页面是HTTPS并且不是一般情况下,你可以随时链接到HTTPS的URL避免出现安全警告(但是,显然,你必须指定TrackPackage.asp的完整URL)或者使用无协议的URL(例如“//google.com”),因为这应该通过协议打开引用的URL作为调用页面,不相关的,如果你使用了',它会更友好',因为这将打开新的窗口/标签没有被弹出窗口阻止程序阻止的风险(只是一个想法;我讨厌弹出窗口)。 – 2012-02-02 05:17:41

+0

@Hari调用页面是HTTPS,我试图让TrackPackage.asp页面成为HTTP。我无法修改链接,所以我不得不使用JavaScript或jQuery – henryaaron 2012-02-02 05:18:46

+0

该协议在URL中指定,因此将http://域添加到URL的开头是解决此问题的最佳方法。没有改变协议的属性。 – 2012-02-02 05:23:25

回答

0

您可能会尝试覆盖原生函数。如果你想这样做选定类的

var windowOpen = window.open; 
window.open = function(url, name, settings) { 
    var url = 'http://www.example.com/' + url; 
    alert("New url = " + url); 
    windowOpen(url, name, settings); 
} 

:但在某些浏览器可能无法正常工作(没有找到这样的浏览器,因此假定它适用于所有的,至少大,浏览器:))链接,那么你可以做这样的(onclick属性修改的理念为文本字符串是不是最好的之一)

<script> 
var windowOpen = window.open, clicked = false; 
window.open = function(url, name, settings) { 
    if (clicked) var url = 'http://www.example.com/' + url; 
    alert("New url = " + url); 
    windowOpen(url, name, settings); 
} 
$(document).ready(function(){ 
    $('span.packagetracklink').click(function(){ 
     clicked = true; 
     setTimeout(function(){clicked = false;}, 200); 
    }); 
}); 
</script> 
<a href="#" onclick="window.open('some_url', '', ''); return false;"> 
<span class="packagetracklink">TRACK YOUR PACKAGE</span> 
</a><br> 
<a href="#" onclick="window.open('some_url', '', ''); return false;"> 
<span class="another_class">TRACK YOUR PACKAGE</span> 
</a> 
+0

完美,我该如何在特定的锚点上调用它? – henryaaron 2012-02-02 18:48:15

+0

与'span.packagetracklink'的父亲相似的锚点 – henryaaron 2012-02-02 18:51:33

+0

@ user1090389没有办法做到这一点。重写函数不知道从哪个元素调用它。网址中是否有区别? – Cheery 2012-02-02 18:58:05

0

如果动态接收.asp页的window.open使用它之前,你可以只是做一个替换字符串来代替“https”开头为“HTTP”协议的URL或者如果有任何协议,在if的开头添加“http”。

我没试过,因为我没有HTTPS页面一起玩做,但我认为它可以工作。

+0

不能修改asp ... – henryaaron 2012-02-02 05:25:44

0

你需要以某种方式能够标签首先获得该实例。它没有一个ID或CLASS,所以你对你自己的存在(除非你粘贴父元素代码和兄弟姐妹的代码,至少片段。

var link = $("a"); // I don't have enough info to tell you how to precisely get this instance 
var originalOnClick = link.attr("onclick"); 
var part1 = "window.open('"; // this is always the same, right? 
var part2 = originalOnClick.substr(part1.length); // the remainder, beginning with TrackPackage.asp 
var newOnClick = part1 + "http://www.example.com/" + part2; 

link.attr("onclick", newOnClick); 

还有其他的方式来注入一个字符串常量成现有的字符串,但这应该工作。 - 如果我明白你不够好,

+0

我不知道为什么,但是这个解决方案没有工作...我宁愿使用你的解决方案,因为我可以选择要更改的链接。 – henryaaron 2012-02-02 21:06:11

+0

粘贴父元素代码和兄弟代码,以便我可以看到如何选择这些a-tags。或者,如果你在javascript中接收到标记为字符串/文本,那么试试这个 - 假设:'var html =“”;',try:'var link = $(“a:first”,html);' 。然后从上面的代码中的第2行继续。 – 2012-02-02 21:22:17

+0

嗨,我有问题与Cheery的代码,我想知道如果你的脚本将能够使用jQuery 1.4.2,因为我知道这是问题... – henryaaron 2012-02-13 06:45:37