2012-01-20 29 views
15

Tôi hiện đang phát triển một ứng dụng web nơi tôi cần mở một cửa sổ bật lên để hiển thị báo cáo. Vấn đề là một số phiên bản của trình thám hiểm không hỗ trợ chức năng javascript window.open, vì vậy khi đây là trường hợp tôi gặp lỗi và mở url mới với location.href. Đây mã:Cách sử dụng mục tiêu ở vị trí.href

try { 
    window.open(url, "","width=1002,height=700,location=0,menubar=0,scrollbars=1,status=1,resizable=0") 
} catch(e) { 
    location.target = "_blank"; 
    location.href = url; 
} 

Vấn đề là các location.target không hoạt động và tôi muốn biết nếu có một cách để xác định mục tiêu của location.href để nó có thể được mở trong một mới chuyển hướng.

Trả lời

12

Vấn đề là một số phiên bản của nhà thám hiểm không hỗ trợ window.open javascript chức năng

Nói những gì? Bạn có thể cung cấp một tham chiếu cho tuyên bố đó không? Với sự tôn trọng, tôi nghĩ bạn phải nhầm lẫn. Ví dụ: This works trên IE6 và IE9.

Hầu hết các trình duyệt hiện đại sẽ không cho phép mã của bạn sử dụng window.open ngoại trừ trả lời trực tiếp cho sự kiện của người dùng, để giữ cho cửa sổ bật lên spam và các thư đó; có lẽ đó là những gì bạn đang nghĩ đến. Miễn là bạn chỉ sử dụng window.open khi trả lời sự kiện của người dùng, bạn nên sử dụng window.open   — với tất cả các phiên bản của IE.

Không có cách nào để sử dụng location để mở cửa sổ mới. Chỉ cần window.open hoặc, tất nhiên, người dùng nhấp vào liên kết với target="_blank".

0

Tại sao không có thẻ neo ẩn trên trang có bộ đích khi bạn cần, sau đó mô phỏng nhấp vào nó khi bạn cần cửa sổ bật lên?

How can I simulate a click to an anchor tag?

này sẽ làm việc trong các trường hợp nơi window.open đã không làm việc

+0

Không phải hôm nay, nhưng tôi đã sử dụng kỹ thuật này trong quá khứ – box86rowh

+0

Tôi phải nói rằng tôi không mua nó. Bạn sẽ làm một bản demo? Trong số này hoạt động, trong các trình duyệt hiện đại, không có sự kiện của người dùng? –

+0

http://jsfiddle.net/BHpMP/ – box86rowh

24

thử thế này, mà mô phỏng một nhấp chuột vào một neo.

var a = document.createElement('a'); 
a.href='http://www.google.com'; 
a.target = '_blank'; 
document.body.appendChild(a); 
a.click(); 
+1

Bạn đã thử chưa? Không hoạt động trên Chrome, ít nhất. –

+0

@ T.J.Crowder Tôi đăng câu trả lời này sau khi tôi đã thử nó trên jsfiddle: http://jsfiddle.net/XLLEk/ và nó hoạt động trên máy tính của tôi. Bạn có thể ngăn chặn tất cả các cửa sổ bật lên trong trình duyệt của mình, đó là lý do tại sao nó không hoạt động trong trường hợp của bạn. Nếu vậy, hãy cân nhắc loại bỏ phần thừa, cảm ơn. – qiao

+1

qiao: Bạn không biết ai đã downvoted câu trả lời của bạn. Bạn biết tôi đã nhận xét và bạn biết một người nào đó bị bỏ phiếu. Đó là tất cả những gì bạn biết; đưa ra giả định dựa trên đó là một ý tưởng tồi. Về câu trả lời: Sử dụng cài đặt mặc định trên Chrome, IE9 và Firefox, cả ba đều chặn cửa sổ bật lên. Thích hợp. Vì vậy, nó không cung cấp bất cứ điều gì trên đầu trang của 'window.open'. –

2

Nếu bạn đang sử dụng <a/> để kích hoạt báo cáo, bạn có thể thử phương pháp này. Thay vì cố gắng tạo ra một cửa sổ mới khi window.open() không thành công, hãy tạo kịch bản mặc định để mở một cửa sổ mới thông qua target (và ngăn chặn nó nếu window.open() thành công).

HTML

<a href="http://my/url" target="_blank" id="myLink">Link</a> 

JS

var spawn = function (e) { 
    try { 
     window.open(this.href, "","width=1002,height=700,location=0,menubar=0,scrollbars=1,status=1,resizable=0") 
     e.preventDefault(); // Or: return false; 
    } catch(e) { 
    // Allow the default event handler to take place 
    } 
} 

document.getElementById("myLink").onclick = spawn; 
+0

Demo: http://jsfiddle.net/cheeken/pAGjF/ – cheeken

3

Bạn có thể thử này:

 <script type="text/javascript"> 
     function newWindow(url){ 
       window.open(url); 
      } 
     </script> 

Và gọi hàm

+1

Không hoạt động trong Chrome – Susan

0

Tính đến năm 2014, bạn có thể kích hoạt các nhấp chuột trên a <a/> thẻ. Tuy nhiên, vì lý do bảo mật, bạn phải làm điều đó trong trình xử lý sự kiện click hoặc trình duyệt sẽ gắn thẻ đó làm cửa sổ bật lên (một số sự kiện khác có thể cho phép bạn kích hoạt mở một cách an toàn).

jsFiddle

9

Bạn có thể sử dụng trên bất kỳ yếu tố nơi onclick hoạt động:

onclick="window.open('some.htm','_blank');"

+0

Câu hỏi không phải là cách thiết lập trình xử lý, nhưng cách đặt chương trình 'target' của liên kết theo chương trình. Bài đăng của bạn không trả lời câu hỏi đó. – amon

+0

Bài đăng cụ thể này khá hữu ích đối với tôi trong một lượt +1. – ProfVersaggi

0
<a href="url" target="_blank"> <input type="button" value="fake button" /> </a> 
3

Nếu bạn đi với các giải pháp của @qiao, có lẽ bạn sẽ muốn loại bỏ các nối con kể từ khi tab vẫn mở và các nhấp chuột tiếp theo sẽ thêm nhiều phần tử hơn vào DOM.

// Code by @qiao 
var a = document.createElement('a') 
a.href = 'http://www.google.com' 
a.target = '_blank' 
document.body.appendChild(a) 
a.click() 
// Added code 
document.body.removeChild(a) 

Có thể ai đó có thể đăng nhận xét lên bài đăng của anh ấy, vì tôi không thể.

+0

Hoạt động như một sự quyến rũ! (với dấu chấm phẩy sau mỗi lệnh, rõ ràng) –