2011-01-21 24 views
27

Tôi hiểu việc dựa vào Người giới thiệu trong tiêu đề yêu cầu không đúng. Nhưng câu hỏi của tôi là, tại sao IE không đặt Người giới thiệu đến Tiêu đề Yêu cầu nếu tôi sử dụng window.location? Bất kỳ suy nghĩ hoặc sửa chữa nào?JavaScript window.location không đặt tham chiếu trong tiêu đề yêu cầu

này không đặt Referer trong Yêu cầu tiêu đề:

function load1() { 
    window.location = "https://" + serverURL + "/path/folder/page.aspx"; 
} 

<a href="javascript:load1()">Link 1</a> 

Trong khi điều này đặt:

<a href="https://hardcode.server.url/path/folder/page.aspx">Link 1</a> 
+0

Bạn đã thử, đi(), Điều hướng() hoặc href? window.location không điều hướng đến một trang, mà chỉ chuyển hướng đến đó. –

Trả lời

18

Thiết window.location là không giống như theo một liên kết trên trang đó. Nó bắt đầu một yêu cầu mới cho trang đó khi người dùng nhập URL vào thanh địa chỉ của trình duyệt.

tôi đã quản lý để xác định vị trí một cách giải quyết:

function goTo(url) 
{ 
    var a = document.createElement("a"); 
    if(!a.click) //for IE 
    { 
     window.location = url; 
     return; 
    } 
    a.setAttribute("href", url); 
    a.style.display = "none"; 
    document.body.appendChild(a); 
    a.click(); 
} 

Nó tạo ra một liên kết trên trang và mô phỏng một nhấp chuột. Kết quả là thay đổi trong window.location và liên kết giới thiệu được điền.

http://ianso.blogspot.com/2006/01/referer-header-not-set-on-http.html

+0

Bạn không cần jQuery cho việc này. $ ("body") appendChild (a) có thể được thay thế bằng document.body.appendChild (a); –

+0

@Anonymous: Cảm ơn. Tôi đã sửa mã. –

+0

Cảm ơn bạn rất nhiều vì đã làm như vậy. Tôi nghĩ bạn là một robot vô tâm. :) –

-3

Yeap, bạn làm việc là tốt, nhưng cuối cùng lại làm:

<a href="#" id="linkOne">Link 1</a> 

<script type="text/javascript"> 
    document.getElementById("linkOne").href = "https://" + serverURL + "/path/folder/page.aspx"; 
</script> 
+2

Tất cả điều này là đặt href của một thẻ neo. Nó không làm bất cứ điều gì trừ khi người dùng nhấp vào liên kết đó. –

4

Tôi không có đủ điểm để nhận xét về câu trả lời của Evan để đề xuất sửa đổi nên tất cả những gì tôi có thể làm là đăng chỉnh sửa tại đây. Tóm lại, document.createElement(a) thiếu dấu ngoặc kép và phải là document.createElement("a") thay thế. Điều này cũng sẽ giúp Kevin lo ngại về FF5.

Toàn bộ chức năng như tôi đã viết nó:

function goTo(url) 
{ 
    var a = document.createElement("a"); 
    if (a.click) 
    { 
     // HTML5 browsers and IE support click() on <a>, early FF does not. 
     a.setAttribute("href", url); 
     a.style.display = "none"; 
     document.body.appendChild(a); 
     a.click(); 
    } else { 
     // Early FF can, however, use this usual method 
     // where IE cannot with secure links. 
     window.location = url; 
    } 
} 

này hoạt động trong môi trường HTTPS của chúng tôi với IE7, IE8, FF3, FF7 và Chrome. Vì vậy, tôi tưởng tượng nó hoạt động trong FF5 là tốt. Nếu không có cách giải quyết này, chúng tôi nhận được 403 lỗi trong IE7 và IE8 khi cố gắng đặt window.location. Về câu hỏi của Sha Lê là tại sao IE làm điều này, tôi chỉ có thể đoán được rằng họ tin rằng nó quá không an toàn. Tôi đã có một vấn đề tương tự với window.open trong IE mà tôi đã phải làm việc xung quanh là tốt.

35

Tiêu đề bài đăng của bạn cho thấy bạn muốn thay đổi trang hiện tại bằng cách sử dụng JavaScript nhưng vẫn có liên kết giới thiệu HTTP được cung cấp (từ những gì tôi hiểu, sử dụng thẻ <a> chỉ dành cho trường hợp thử nghiệm).

Bạn cần phải nhận thức được vấn đề qua trình duyệt:

  • Tiêu đề giới thiệu HTTP (HTTP Referer) được thiết lập khi thay đổi window.location.href dưới các trình duyệt sau:
    • MSIE 9 (nhưng có thể là bất kỳ phiên bản nào ở trên 9)
    • Firefox (ít nhất là 3.0, 3.5, 4.0, 5.0, nhưng có lẽ hầu hết tất cả các phiên bản)
    • Chrome (ít nhất là 9, nhưng có lẽ hầu hết tất cả các phiên bản)
    • Safari (ít nhất là 5, nhưng có lẽ hầu hết tất cả các phiên bản)
    • Opera (ít nhất là 11, nhưng có lẽ hầu hết tất cả các phiên bản)
  • MSIE (ít nhất là 6, 7, 8): các tham chiếu là không bộ khi thay đổi window.location.href (đây là lý do tại sao một số giả giải pháp này được dựa trên myLink.click())
  • Firefox (ít nhất là 3.0, 3.5, 4.0): các click chức năng không tồn tại (đây là lý do tại sao pseudo-giải pháp dựa trên myLink.click() không làm việc)
  • Firefox 5: các click chức năng tồn tại dưới Firefox 5 nhưng không thay đổi vị trí cửa sổ, vì vậy tất cả các phương pháp dựa vào sự tồn tại của phương pháp myLink.click() sẽ không hoạt động. Gọi số myLink.onclick() hoặc myLink.onClick() tăng lỗi ("onclick không phải là chức năng"), vì vậy solutions based on these calls sẽ không hoạt động.

Để quản lý những vấn đề này qua trình duyệt, Tôi đang sử dụng các phương pháp sau đây:

function navigateToUrl(url) { 
    var f = document.createElement("FORM"); 
    f.action = url; 

    var indexQM = url.indexOf("?"); 
    if (indexQM>=0) { 
     // the URL has parameters => convert them to hidden form inputs 
     var params = url.substring(indexQM+1).split("&"); 
     for (var i=0; i<params.length; i++) { 
      var keyValuePair = params[i].split("="); 
      var input = document.createElement("INPUT"); 
      input.type="hidden"; 
      input.name = keyValuePair[0]; 
      input.value = keyValuePair[1]; 
      f.appendChild(input); 
     } 
    } 

    document.body.appendChild(f); 
    f.submit(); 
} 

navigateToUrl("http://foo.com/bar"); 

Giải pháp này hoạt động trên tất cả các hương vị trình duyệt và phiên bản liệt kê ở trên. Nó có lợi thế là đơn giản, đa trình duyệt và dễ hiểu. Lưu ý rằng điều này chưa được kiểm tra theo HTTP S.

+2

Điều này làm việc tuyệt vời trừ khi bạn muốn sử dụng phương pháp = "GET" và có các tham số url trong url của bạn. – six8

+0

@Cixate: true cho tham số URL (Tôi đã chỉnh sửa mã), nhưng tôi không hiểu đối số cho phương thức biểu mẫu vì phương thức biểu mẫu mặc định là GET. –

+0

Xin lỗi, không ngụ ý bạn cần 'method = GET' trong thẻ, vừa nói rằng bạn không thể sử dụng tham số trong URL nếu biểu mẫu đang sử dụng phương thức GET. Nhưng các thông số ẩn của bạn sẽ hoạt động tốt. – six8

Các vấn đề liên quan