2012-02-02 75 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