jQuery Force đặt thuộc tính src cho iframe


83

Tôi có một trang chính (thực sự là một JSP) với iframe bên trong nó là;

<iframe name="abc_frame" id="abc_frame" src="about:blank" frameborder="0" scrolling="no"></iframe>

Bây giờ có nhiều liên kết trên trang chính (được hiển thị động qua JSP) có thể cố gắng đặt src thành một số URL ...

Bây giờ câu hỏi của tôi là, bằng cách sử dụng jQuery (có thể là live ()), tôi có thể ghi đè điều đó theo cách mà thuộc tính "src" cho abc_frame sẽ luôn có một số giá trị cụ thể (ví dụ: "somefixedURL")

Tôi không thể chụp liên kết bằng cách nhấp vào, vì nó được tạo hoàn toàn động thông qua một số mã Java và do đó tôi đang cố ghi đè iframe src?

Câu trả lời:


166

Sử dụng attr

$('#abc_frame').attr('src', url)

Bằng cách này, bạn có thể lấy và đặt mọi thuộc tính thẻ HTML. Lưu ý rằng cũng có .prop(). Xem .prop () so với .attr () về sự khác biệt. Phiên bản ngắn: .attr()được sử dụng cho các thuộc tính vì chúng được viết bằng mã nguồn HTML và .prop()dành cho tất cả JavaScript được gắn vào phần tử DOM.


Lý do công việc này sẽ không phải là sau khi trang đã được nạp, liên kết khác sẽ thay đổi src đến một giá trị mới ...
testndtv

Nếu bạn điền mã vào cuối tệp, mã của bạn sẽ được thực thi sau các tập lệnh khác. Nếu sự cố của bạn được tạo ra bởi một liên kết cụ thể mà người dùng nhấp vào, bạn có thể thêm sự kiện onclick thứ hai vào liên kết. Nếu không, bạn phải sử dụng setTimout / setInterval và kiểm tra lại giá trị của src (xấu xí!).
PiTheNumber

20

nếu bạn đang sử dụng jQuery 1.6 trở lên, bạn muốn sử dụng .prop () hơn là.attr():

$('#abc_frame').prop('src', url)

Xem câu hỏi này để biết giải thích về sự khác biệt.


4
Liên kết thú vị nhưng xin lưu ý rằng câu trả lời đã được cập nhật vì jQuery đã hoàn nguyên attr() hành vi. Nhìn chung, tôi sẽ không đồng ý với việc sử dụng .prop()ở đây vì đây srclà một thuộc tính không phải là một thuộc tính như tài liệu API cho .prop()bạn được liên kết giải thích.
PiTheNumber

9

Trong khi tạo các liên kết, hãy đặt mục tiêu đến thuộc tính tên iframes và có thể bạn sẽ không phải xử lý jquery.

<a href="inventory.aspx" target="contentframe"  title="Title Inventory">
<iframe id="iframe1" name="contentframe"  ></iframe>

Ý tưởng tốt là sử dụng phương pháp gốc của trình duyệt khi có thể, nhưng tôi nghĩ rằng người dùng có các liên kết động, do đó cần phải nắm bắt được trình duyệt nhấp chuột.
efwjames

Động như thế nào? Khi tạo trang, chỉ cần đặt href thành bất kỳ thứ gì bạn cần. Hoặc ngay cả khi tải dom chỉ cần đặt thuộc tính href nếu bạn phải. Vấn đề là không cần phải xử lý thuộc tính src của iframe và điều này có thể thực hiện được.
Brian Rizo

8
$(document).ready(function() {
    $('#abc_frame').attr('src',url);
})

5

Đặt thuộc tính src không hoạt động với tôi. Khung nội tuyến không hiển thị url.

Điều làm việc cho tôi là:

window.open(url, "nameof_iframe");

Hy vọng nó sẽ giúp một ai đó.


cài đặt với .attr () cũng không hoạt động đối với tôi. Tuy nhiên, điều này hoạt động
Andy N

3
<script type="text/javascript">
  document.write(
    "<iframe id='myframe' src='http://www.example.com/" + 
    window.location.search + "' height='100' width='100%' >"
  ) 
</script>  

Mã này lấy các tham số url (? A = 1 & b = 2) từ trang chứa iframe và gắn chúng vào url cơ sở của iframe. Nó hoạt động cho các mục đích của tôi.


document.writetương đương với việc sử dụng eval()- nó phải được chèn tập lệnh! Chỉ sử dụng hết sức thận trọng!
amphetamachine

1

Bạn không thể đặt src của iframe FIX hoặc ngăn chặn gửi javascript / biểu mẫu để thay đổi vị trí của nó. Tuy nhiên bạn có thể đặt lệnh để onload của trang và thay đổi hành động của mỗi liên kết động.


1
$(".excel").click(function () {
    var t = $(this).closest(".tblGrid").attr("id");
    window.frames["Iframe" + t].document.location.href = pagename + "?tbl=" + t;
});

đây là những gì tôi sử dụng, không cần jquery cho việc này. trong trường hợp cụ thể này cho mỗi bảng tôi có biểu tượng xuất excel, điều này buộc iframe được gắn vào bảng đó phải tải cùng một trang với một biến trong Chuỗi truy vấn mà trang đó tìm kiếm và nếu được tìm thấy phản hồi sẽ ghi ra một luồng có mimetype excel và bao gồm dữ liệu cho bảng đó.

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.