Tôi có một hộp chọn gọi window.open(url)
khi một mục được chọn. Firefox sẽ mở trang trong một tab mới theo mặc định. Tuy nhiên, tôi muốn trang mở trong một cửa sổ mới, không phải là một tab mới.
Làm thế nào tôi có thể thực hiện điều này?
Tôi có một hộp chọn gọi window.open(url)
khi một mục được chọn. Firefox sẽ mở trang trong một tab mới theo mặc định. Tuy nhiên, tôi muốn trang mở trong một cửa sổ mới, không phải là một tab mới.
Làm thế nào tôi có thể thực hiện điều này?
Câu trả lời:
Cung cấp cho cửa sổ một tham số 'thông số kỹ thuật' với chiều rộng / chiều cao. Xem ở đây cho tất cả các tùy chọn có thể.
window.open(url, windowName, "height=200,width=200");
Khi bạn chỉ định chiều rộng / chiều cao, nó sẽ mở nó trong một cửa sổ mới thay vì một tab.
Bạn không cần sử dụng chiều cao, chỉ cần đảm bảo rằng bạn sử dụng _blank
, Nếu không có nó, nó sẽ mở ra trong một tab mới.
Đối với một cửa sổ trống:
window.open('', '_blank', 'toolbar=0,location=0,menubar=0');
Đối với một URL cụ thể:
window.open('http://www.google.com', '_blank', 'toolbar=0,location=0,menubar=0');
location=0
là cần thiết khi JS được gọi từ một nút hoặc phần tử neo.
location=0
các tham số. Tôi cũng đề nghị đặt tên cửa sổ thay vì sử dụng _blank
mục tiêu, để cùng một cửa sổ được sử dụng lại nếu người dùng nhấp nhiều lần vào phần tử mở cửa sổ bật lên và kết nối với nhau focus()
để cửa sổ bật lên đã mở sẽ tập trung:window.open('http://stackoverflow.com', 'Stack_Overflow','location=0').focus();
Tôi có thể sai, nhưng theo những gì tôi hiểu, điều này được kiểm soát bởi các tùy chọn trình duyệt của người dùng và tôi không tin rằng điều này có thể bị ghi đè.
Thử:
window.open("", [window name], "height=XXX,width=XXX,modal=yes,alwaysRaised=yes");
Tôi có một số mã làm những gì bạn nói, nhưng có rất nhiều tham số trong đó. Tôi nghĩ rằng đây là mức tối thiểu, hãy cho tôi biết nếu nó không hoạt động, tôi sẽ đăng phần còn lại.
OK, sau khi thực hiện rất nhiều bài kiểm tra, đây là concluson của tôi:
Khi bạn thực hiện:
window.open('www.yourdomain.tld','_blank');
window.open('www.yourdomain.tld','myWindow');
hoặc bất cứ điều gì bạn đặt vào trường đích, điều này sẽ không thay đổi gì: trang mới sẽ được mở trong một tab mới (vì vậy tùy thuộc vào sở thích của người dùng)
Nếu bạn muốn trang được mở trong một cửa sổ "thực" mới, bạn phải đặt thêm tham số. Giống:
window.open('www.yourdomain.tld', 'mywindow','location=1,status=1,scrollbars=1, resizable=1, directories=1, toolbar=1, titlebar=1');
Sau khi thử nghiệm, có vẻ như tham số phụ bạn sử dụng, không thực sự quan trọng: đây không phải là thực tế bạn đặt "tham số này" hoặc "thông số khác" này tạo ra "cửa sổ thực" mới nhưng thực tế có tham số mới ).
Nhưng một cái gì đó bị nhầm lẫn và có thể giải thích rất nhiều câu trả lời sai:
Điều này:
win1 = window.open('myurl1', 'ID_WIN');
win2 = window.open('myurl2', 'ID_WIN', 'location=1,status=1,scrollbars=1');
Và điều này:
win2 = window.open('myurl2', 'ID_WIN', 'location=1,status=1,scrollbars=1');
win1 = window.open('myurl1', 'ID_WIN');
sẽ KHÔNG cho kết quả tương tự.
Trong trường hợp đầu tiên, khi bạn lần đầu mở một trang không có tham số phụ, nó sẽ mở trong một tab mới . Và trong trường hợp này, cuộc gọi thứ hai cũng sẽ được mở trong tab này vì tên bạn đặt.
Trong trường hợp thứ hai, vì cuộc gọi đầu tiên của bạn được thực hiện với tham số phụ, trang sẽ được mở trong một " cửa sổ thực " mới. Và trong trường hợp đó, ngay cả khi cuộc gọi thứ hai được thực hiện mà không có tham số phụ, nó cũng sẽ được mở trong " cửa sổ thực " mới này ... nhưng cùng một tab!
Điều này có nghĩa là cuộc gọi đầu tiên rất quan trọng vì nó quyết định nơi đặt trang.
Bạn không cần phải làm vậy. Cho phép người dùng có bất cứ sở thích nào họ muốn.
Firefox làm điều đó theo mặc định vì việc mở một trang trong một cửa sổ mới gây khó chịu và một trang không bao giờ được phép làm như vậy nếu đó không phải là điều người dùng mong muốn. (Firefox không cho phép bạn mở các tab trong một cửa sổ mới nếu bạn đặt nó theo cách đó).
Bạn có thể thử chức năng sau:
<script type="text/javascript">
function open(url)
{
var popup = window.open(url, "_blank", "width=200, height=200") ;
popup.location = URL;
}
</script>
Mã HTML để thực thi:
<a href="#" onclick="open('http://www.google.com')">google search</a>
popup.location = URL;
gì? Cuộc window.open()
gọi sẽ mở nó đến URL thích hợp và trong ví dụ mã của bạn, URL
không được xác định để nó sẽ quay trở lại đối tượng URL thử nghiệm (và không hỗ trợ rộng rãi) . Trong khi sử dụng nó cho điều đó là gây tranh cãi, tôi tò mò những động lực cho việc sử dụng nó ở đây là gì?
Chìa khóa là các tham số:
Nếu bạn cung cấp Thông số [Chiều cao = "", Chiều rộng = ""], thì nó sẽ mở trong các cửa sổ mới.
Nếu bạn KHÔNG cung cấp Thông số, thì nó sẽ mở trong tab mới.
Đã thử nghiệm trong Chrome và Firefox
Thật thú vị, tôi thấy rằng nếu bạn chuyển vào một chuỗi trống (trái ngược với chuỗi null hoặc danh sách các thuộc tính) cho thuộc tính thứ ba của window.open, nó sẽ mở trong một tab mới cho Chrome, Firefox và IE. Nếu vắng mặt, hành vi đã khác.
Vì vậy, đây là cuộc gọi mới của tôi:
window.open(url, windowName, '');
thử phương pháp đó .....
function popitup(url) {
//alert(url);
newwindow=window.open("http://www.zeeshanakhter.com","_blank","toolbar=yes,scrollbars=yes, resizable=yes, top=500, left=500, width=400, height=400");
newwindow.moveTo(350,150);
if (window.focus)
{
newwindow.focus()
}
return false;
}
Đối với tôi giải pháp là có
"location=0"
trong tham số thứ 3. Đã thử nghiệm trên FF / Chrome mới nhất và phiên bản IE11 cũ
Cuộc gọi phương thức đầy đủ tôi sử dụng ở bên dưới (Vì tôi muốn sử dụng chiều rộng thay đổi):
window.open(url, "window" + id, 'toolbar=0,location=0,scrollbars=1,statusbar=1,menubar=0,resizable=1,width=' + width + ',height=800,left=100,top=50');
Tôi vừa thử điều này với IE (11) và Chrome (54.0.2794.1 canary SyzyASan):
window.open(url, "_blank", "x=y")
... Và nó đã mở trong một cửa sổ mới.
Điều đó có nghĩa là Clint pachl đã đúng khi nói rằng việc cung cấp bất kỳ một tham số nào sẽ khiến cửa sổ mới mở.
- và rõ ràng nó không phải là một tham số hợp pháp!
(YMMV - như tôi đã nói, tôi chỉ thử nghiệm ở hai nơi ... và lần nâng cấp tiếp theo có thể làm mất hiệu lực kết quả, bằng mọi cách)
ETA: Tôi chỉ nhận thấy, mặc dù - trong IE, cửa sổ không có trang trí.
Đã trả lời ở đây . Nhưng đăng nó một lần nữa để tham khảo.
window.open()
sẽ không mở trong tab mới nếu nó không xảy ra trong sự kiện nhấp thực tế. Trong ví dụ đã cho, url đang được mở trong sự kiện nhấp thực tế. Điều này sẽ làm việc với điều kiện người dùng có các cài đặt phù hợp trong trình duyệt.
<a class="link">Link</a>
<script type="text/javascript">
$("a.link").on("click",function(){
window.open('www.yourdomain.com','_blank');
});
</script>
Tương tự, nếu bạn đang cố gắng thực hiện cuộc gọi ajax trong chức năng nhấp và muốn mở cửa sổ thành công, hãy đảm bảo bạn đang thực hiện cuộc gọi ajax với async : false
tùy chọn được đặt.
Tôi đã có câu hỏi tương tự nhưng tìm thấy một giải pháp tương đối đơn giản cho nó.
Trong JavaScript tôi đã kiểm tra window.opener !=null;
để xác định xem cửa sổ có bật lên không. Nếu bạn đang sử dụng một số mã phát hiện tương tự để xác định xem cửa sổ mà trang web của bạn đang được hiển thị có bật lên hay không, bạn có thể dễ dàng "tắt" khi muốn mở cửa sổ "mới" bằng cách sử dụng JavaScript windows mới.
Chỉ cần đặt cái này ở đầu trang bạn muốn luôn là một cửa sổ "mới" .
<script type="text/javascript">
window.opener=null;
</script>
Tôi sử dụng điều này trên trang đăng nhập của trang web của mình để người dùng không có hành vi bật lên nếu họ sử dụng cửa sổ bật lên để điều hướng đến trang web của tôi.
Bạn thậm chí có thể tạo một trang chuyển hướng đơn giản thực hiện điều này và sau đó di chuyển đến URL bạn đã cung cấp. Cái gì đó như,
JavaScript trên trang mẹ:
window.open("MyRedirect.html?URL="+URL, "_blank");
Và sau đó bằng cách sử dụng một ít javascript từ đây, bạn có thể lấy URL và chuyển hướng đến nó.
JavaScript trên trang chuyển hướng:
<script type="text/javascript">
window.opener=null;
function getSearchParameters() {
var prmstr = window.location.search.substr(1);
return prmstr != null && prmstr != "" ? transformToAssocArray(prmstr) : {};
}
function transformToAssocArray( prmstr ) {
var params = {};
var prmarr = prmstr.split("&");
for ( var i = 0; i < prmarr.length; i++) {
var tmparr = prmarr[i].split("=");
params[tmparr[0]] = tmparr[1];
}
return params;
}
var params = getSearchParameters();
window.location = params.URL;
</script>