Mở trang mới theo chương trình trên Tab


98

Tôi đang cố "buộc" Safari hoặc IE7 mở một trang mới bằng một tab mới .

Theo chương trình, ý tôi là:

window.open('page.html','newtaborsomething');

1
Tôi không chắc mình hiểu chính xác - bạn đang phát triển một ứng dụng hoạt động với IE và bạn muốn mở từng trang mới trên tab mới? Hoặc bạn chỉ muốn thiết lập IE để mở tab mới khi nhấp vào một liên kết? Hay bạn đang tạo bất kỳ trang web nào có nhiều liên kết hơn và bạn muốn chúng mở riêng lẻ? Xin vui lòng làm cho nó rõ ràng hơn.
Dungeo

Cảm ơn tất cả các nhận xét và câu trả lời của bạn, tôi biết đây không phải là vấn đề lớn và không phải là vấn đề trong quá trình phát triển của tôi, nhưng đây là yêu cầu của khách hàng, không phải là yêu cầu quan trọng mà tôi chỉ muốn biết. Vấn đề là IE7 và Safari sẽ không mở cửa sổ bật lên có tab sử dụng javascript hoặc thuộc tính đích, đúng không?
Ricardo Vega

Câu trả lời:


63

Bạn không thể kiểm soát trực tiếp điều này, vì đó là một tùy chọn do người dùng Internet Explorer kiểm soát.

Mở trang bằng Window.open với một tên cửa sổ khác sẽ mở trong một cửa sổ trình duyệt mới như cửa sổ bật lên HOẶC mở trong một tab mới, nếu người dùng đã định cấu hình trình duyệt để làm như vậy.


Khi tùy chọn "Để Internet Explorer quyết định cách cửa sổ bật lên mở" được chọn, Internet Explorer sử dụng tiêu chí nào để đưa ra quyết định này?
Dead.Rabit

113

Bạn có thể, trong Firefox, nó hoạt động, thêm thuộc tính target = "_ newtab" vào liên kết để buộc mở một tab mới.

<a href="some url" target="_newtab">content of the anchor</a>

Trong javascript, bạn có thể sử dụng

window.open('page.html','_newtab');

Nói như vậy, tôi đồng ý một phần với Sam. Bạn không nên bắt người dùng mở các trang mới hoặc tab mới mà không cho họ thấy một gợi ý về những gì sẽ xảy ra trước khi họ nhấp vào liên kết.

Hãy cho tôi biết nếu nó cũng hoạt động trên trình duyệt khác (tôi không có cơ hội thử nó trên trình duyệt khác ngoài Firefox vào lúc này).

Chỉnh sửa: thêm tài liệu tham khảo cho ie7 Có lẽ liên kết này có thể hữu ích
http://social.msdn.microsoft.com/forums/en-US/ieextensiondevelopment/thread/951b04e4-db0d-4789-ac51-82599dc60405/


6
Cảm ơn thủ thuật Firefox này, hiện tôi đã cập nhật addon TargetKiller của mình để loại bỏ "_newtab" và "newtab". : P
thenonhacker

1
Tôi thực sự đánh giá cao câu trả lời của bạn, nhưng tôi biết rằng Firefox sẽ làm điều đó (một số văn bản, không phải do tôi kiểm tra, nhận xét rằng điều này không phải lúc nào cũng đúng, có 50-50 cơ hội để có được một cửa sổ hoặc tab mới). Tôi cũng nghĩ rằng đây không phải là một vấn đề, nhưng, bạn biết khách hàng :)
Ricardo Vega

2
Điều này có thể không đúng trên tất cả các bản dựng / nền tảng, nhưng Firefox 3.5 trên Linux không cho phép bạn làm điều này nhiều lần ... nếu bạn có nhiều liên kết target = "_ newtab" trên trang của mình, hãy nhấp vào bất kỳ liên kết nào trong số đó sẽ chỉ điền một tab mới duy nhất ... nghĩa là, các lần nhấp tiếp theo sẽ ghi đè lên bất kỳ thứ gì đã mở trước đó trong tab đó. Làm cho tôi nghĩ rằng đây thực sự là mở một tab có tên "_newtab", chứ không phải là một giải pháp thay thế cho trình duyệt cụ thể.
Rylee Corradini

55
Tôi khá chắc "_newtab" là vô nghĩa, trừ khi ai đó có tài liệu ngược lại. Tất cả những gì bạn đang làm là mở một cửa sổ có tên là _newtab (đó là lý do tại sao tất cả các liên kết tiếp theo với mục tiêu đó đều mở trong cùng một cửa sổ). Bạn có thể nhắm mục tiêu "foo" hoặc "bar" và xem cùng một hành vi. Các mục tiêu nổi tiếng duy nhất là _blank, _self, _parent và _top. htmlcodetutorial.com/linking/_A_TARGET.html
Tom Lianza

43

Những người trong số bạn đang cố gắng sử dụng những thứ sau:

window.open('page.html', '_newtab');

thực sự nên nhìn vào phương thức window.open.

Tất cả những gì bạn đang làm là yêu cầu trình duyệt mở một cửa sổ mới NAMED "_newtab" và tải page.html vào đó. Mỗi trang mới bạn tải sẽ tải vào cửa sổ đó. Tuy nhiên, nếu người dùng đặt trình duyệt của họ để mở trang mới trong tab mới thay vì cửa sổ mới, trình duyệt sẽ mở một tab. Bất kể, nó sử dụng cùng một tên cho cửa sổ hoặc tab.

Nếu bạn muốn các trang khác nhau mở trong các cửa sổ hoặc tab khác nhau, bạn sẽ phải thay đổi TÊN của cửa sổ / tab mới thành một cái gì đó khác, chẳng hạn như:

window.open('page2.html', '_newtab2');

Tất nhiên tên cho cửa sổ / tab mới có thể là bất kỳ tên nào như page1, page2, page3, v.v. thay vì _newtab2.


3
biết công cụ của mình. '_newtab' không phải là tên dành riêng. '_blank' là một thứ đặc biệt mở ra một cửa sổ / tab không xác định và không được đặt tên - cái này bạn có thể tiếp tục sử dụng nhiều lần. '_newtab' không có gì đặc biệt ngoại trừ nó là tên cụ thể mà bạn đã đặt cho một tab hoặc cửa sổ mới (mặc định), mà trình duyệt của bạn sẽ tiếp tục làm mới với bất kỳ url nào bạn gửi đến nó.
BradChesney79,

14

Việc người dùng muốn sử dụng tab mới hay cửa sổ mới tùy thuộc vào người dùng, việc sửa đổi hành vi này không phải là việc của nhà phát triển. Tôi không nghĩ rằng bạn có thể làm điều đó.

Thú cưng của tôi - Tôi không thích khi các trang web buộc tôi phải mở trong một cửa sổ / tab mới - Tôi hoàn toàn có khả năng đưa ra quyết định đó cho chính mình. Đặc biệt là khi họ làm điều đó trong javascript - điều đó thực sự vô ích.


1
+1 cho Sam - các trang mới mở trong tab hoặc cửa sổ là lựa chọn cụ thể của trình duyệt (và người dùng). Nói chung, tôi ghét nó khi bất kỳ trang web nào mở một cửa sổ mới.
Richard Ev

Ngoài ra: Trong định nghĩa "nghiêm ngặt", không có thuộc tính hợp lệ "mục tiêu" vì không gây khó chịu cho người dùng. Hãy thử nó: validator.w3.org
guerda

4
Tôi thích mở hàng loạt tab ở nhà, vì vậy tôi là người dùng trong trường hợp đó. Chỉ là một lời nhắc nhở rằng có những trường hợp ngoại lệ.
Mark Essel

7
Mặc dù tôi đồng ý rằng nó có thể gây phiền nhiễu khi các trang web buộc các hành động, tôi nghĩ rằng hơi vô ích khi nói đơn giản rằng bạn không nên làm điều gì đó mà không xem xét lý do tại sao ai đó có thể muốn làm điều đó. Các trang web thường mở mọi thứ trong các tab mới, đặc biệt là các liên kết trang web bên ngoài hoặc khi một trang đang hoạt động được thay thế bằng nội dung mới không hữu ích, vì vậy đó không phải là hành vi hoàn toàn bất ngờ. Tôi cũng đề nghị rằng đây không thực sự là một câu trả lời cho câu hỏi và sẽ phù hợp hơn như một nhận xét cho bài đăng gốc.
andyface

1
Tôi không đồng ý, giả định rằng mặc định cho người dùng là lựa chọn thiết kế cho mỗi ứng dụng web không cho mỗi trình duyệt. Trình duyệt có thể đăng ký mặc định trong trường hợp ứng dụng không đăng ký. Ngoài ra, nếu trình duyệt cung cấp cho người dùng một cách để ghi đè mặc định ứng dụng / mặc định trình duyệt, thì đó là cách tốt nhất của cả hai thế giới. Người dùng> Ứng dụng> Trình duyệt.
Derek Litz

8

Bạn đã thử thích chưa

var open_link = window.open('','_blank');
open_link.location="somepage.html";

Trình duyệt chéo này có tương thích không? Có vẻ hoạt động trên IE8, lo lắng về các phiên bản trong tương lai hoặc các trình duyệt khác.
n00b

Có .. nó tương thích cho nhiều trình duyệt. Tôi không có vấn đề gì với nó cho đến bây giờ: D
Thurein Soe.

5

Tôi đã tìm ra trong Chrome,

window.open('page.html','_newtab')

sẽ chỉ hoạt động một lần.

Bạn có thể dùng:

window.open(ct.getNewHref(),'_newtab' + Math.floor(Math.random()*999999));

Để mở nhiều tab mới.


10
đó là bởi vì trong Chrome, _newtab chỉ là một cái tên và bạn đang yêu cầu nó mở trang trong tab có tên "_newtab"
w00t

3

Mã tôi sử dụng với jQuery:

$("a.btn_external").click(function() {
    url_to_open = $(this).attr("href");
    window.open(url_to_open, '_blank');
    return false;
});

Điều này rất hữu ích để phân biệt giữa các sự kiện nhấp chuột của cha mẹ với con. Bằng cách sử dụng phương pháp này, bạn không kích hoạt sự kiện nhấp chuột của phụ huynh.


8
Tại sao không chỉ sử dụng html cũ đơn giản? <a href="page.html" target="_blank">foo</a>
pixelastic

1
@pixelastic "Bằng cách sử dụng phương pháp này, bạn không kích hoạt sự kiện nhấp chuột của cha mẹ".
Michael Blackburn

3

Điều này hoạt động 100%

window.open('http://www.google.com/','_newtab' + Date.now());


0

Nếu bạn muốn, bạn có thể sử dụng phương pháp này, hơi khó, nhưng sẽ cung cấp chức năng mong muốn:

jQuery('<a/>', {
    id: 'foo',
    href: 'http://google.com',
    title: 'Become a Googler',
    rel: 'external',
    text: 'Go to Google!',
    target:'_blank',
    style:'display:none;'
}).appendTo('#mySelector');

$('#foo').click()

bạn có thể cung cấp một jsfiddle?
Xenology

-2

Điều này có thể hoạt động nếu bạn có thể gọi một tệp hàng loạt (tôi sử dụng php với XP sp2 và IE8 ... bạn có thể thử IE7, dunno). Sử dụng phần sau (hoặc tương tự) trong tệp .bat của bạn để mở Windows: Bắt đầu "" C: \ Progra ~ 1 \ Intern ~ 1 \ iexplore "http://www.site.com". Không có khoảng cách giữa dấu ngoặc kép và C: \ Progr ... vv Tại một số thời điểm, điều này có thể bắt đầu mở các cửa sổ mới (tức là target = "_ blank") thay vì các tab mới, nhưng hoạt động đến một thời điểm; không được thử nghiệm rộng rãi. Để sử dụng điều này trong một tệp hàng loạt thông thường (CMD.exe), bạn có thể cần phải mở sẵn một cửa sổ. Chỉ chia sẻ vài điều tôi tình cờ gặp. CHỈNH SỬA để làm rõ.


-7
<a href="http://www.google.com/" target="_self">New Tab Example</a>

Hoạt động trong IE7.

Trân trọng,

Glenn


8
Glenn điều này trái ngược với những gì OP yêu cầu. _self sẽ mở tài liệu trong cùng một cửa sổ hoặc khung.
travega

Ngoài ra, nó không phải là cách để mở theo cách lập trình. Điều ngạc nhiên là làm thế nào nó đạt được +10 rep (+ 3 / -10) với câu trả lời này.
vusan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.