2010-11-04 32 views
5

Sự cố tôi gặp phải là khi tôi cố gắng thực hiện một việc như mã bên dưới, cửa sổ sẽ bị chặn bởi trình chặn cửa sổ bật lên. Tôi đang sử dụng getScript để tôi có thể thực hiện các yêu cầu miền chéo. Tôi đang sử dụng jQuery 1.4.2 để làm như dưới đây.Làm cách nào để mở một cửa sổ mới bằng URL được tạo bên trong hàm gọi lại getScript và tránh trình chặn cửa sổ bật lên?

Ví dụ về mã mà sẽ bị chặn:

//Code that gets blocked by pop-up blockers 
$(document).ready(function(){ 
    $(".popup").click(function(){ 
     $.getScript("URL_To_A_Javascript_File", function(){ 
      window.open("dynamicURL", "_blank"); 
     }); 
    }); 
}); 

Ví dụ về mã mà bị ức chế trong quá khứ, nhưng chẳng có được URL trong thời gian:

//This code will get past the pop-up blocker, but the var url won't be updated 
//with the dynamicURL before the window.open() fires in browsers 
//like safari or chrome. 
$(document).ready(function(){ 
    var url; 
    $(".popup").click(function(){ 
     $.getScript("URL_To_A_Javascript_File", function(){ 
      url = "dynamicURL"; 
     }); 
     window.open(url, "_blank"); 
    }); 
}); 

Làm thế nào tôi có thể mở một cửa sổ mới sử dụng URL được tạo bên trong hàm gọi lại getScript và tránh trình chặn cửa sổ bật lên?

+0

bạn chỉ sử dụng lệnh này cho XD, tại sao bạn cần sử dụng 'window.open'? – prodigitalson

+0

Lý do tôi cần sử dụng XD ajax là vì tệp javascript tôi đang gọi được lưu trữ trong CRM tiếp thị và đang trả lại tập lệnh chứa thông tin về người dùng mà tôi cần xác định trang nào sẽ bật lên. –

Trả lời

6

Ok, có vẻ như cuối cùng tôi đã tìm ra cách để làm những gì tôi đang cố gắng làm.

Cách này cho phép tôi thực hiện cửa sổ bật lên mà không cần trang trung gian xử lý javascript.

var newWin; 
$(document).ready(function(){ 
    $(".popup").click(function(){ 
     newWin = window.open(); 

     $.getScript("URL_To_A_Javascript_File", function() { 
      newWin.location = "DynamicURL"; 
     }); 
     return false; 
    }); 
}); 
+1

Cảm ơn bạn đã cứu tôi khỏi sự thất vọng x 1000! –

1

Bạn không thể tránh trình chặn cửa sổ bật lên và để tất cả chúng tôi cảm ơn điều đó.

Khi mã của bạn mở cửa sổ từ một số vòng lặp sự kiện không phải là kết quả trực tiếp của hành động người dùng (chủ yếu có nghĩa là sự kiện "nhấp"), trình duyệt giả định rằng người dùng phải có lựa chọn xem cửa sổ mới hay không .

Trong trường hợp giống như "getScript", trình xử lý được gọi khi tập lệnh được nhận là một trong các loại vòng sự kiện không phải của người dùng đó, do đó quy tắc chặn sẽ áp dụng.

Bạn có thể, chạy mã "getScript" từ cửa sổ mới. Trình duyệt sẽ cho phép cửa sổ được mở từ trình xử lý "nhấp" đó.

+0

ATM Tôi đang mở một cửa sổ mới sau đó chuyển hướng đến trang mà nó cần sau khi thực hiện mã getScript trên document.ready(), nhưng tôi muốn tránh làm theo cách này. Về cơ bản tôi cần một cách để chạy getScript sau khi người dùng nhấp vào một liên kết, và sau đó khi getScript kết thúc và đã cập nhật URL var, hãy mở cửa sổ. –

+0

Tôi hiểu sự thất vọng, nhưng không có cơ chế cho phép bạn cung cấp cho trình duyệt một số đảm bảo rằng bạn không phải là điều xấu. – Pointy

0

Đơn giản là không hoạt động với cửa sổ bật lên, hãy sử dụng thứ gì đó như Hộp đèn thay thế.

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