การเปลี่ยน iframe src ด้วย Javascript


98

ฉันกำลังพยายามเปลี่ยน<iframe src=... >เวลาที่มีคนคลิกปุ่มตัวเลือก ด้วยเหตุผลบางประการรหัสของฉันทำงานไม่ถูกต้องและฉันมีปัญหาในการหาสาเหตุ นี่คือสิ่งที่ฉันมี:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
  <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
  <title>Untitled 1</title>

  <script>
  function go(loc) {
    document.getElementById('calendar').src = loc;
  }
  </script>
</head>

<body>
  <iframe id="calendar" src="about:blank" width="1000" height="450" frameborder="0" scrolling="no"></iframe>

  <form method="post">
    <input name="calendarSelection" type="radio" onselect="go('http://calendar.zoho.com/embed/9a6054c98fd2ad4047021cff76fee38773c34a35234fa42d426b9510864356a68cabcad57cbbb1a0?title=Kevin_Calendar&type=1&l=en&tz=America/Los_Angeles&sh=[0,0]&v=1')" />Day
    <input name="calendarSelection" type="radio" onselect="go('http://calendar.zoho.com/embed/9a6054c98fd2ad4047021cff76fee38773c34a35234fa42d426b9510864356a68cabcad57cbbb1a0?title=Kevin_Calendar&type=1&l=en&tz=America/Los_Angeles&sh=[0,0]&v=1')" />Week
    <input name="calendarSelection" type="radio" onselect="go('http://calendar.zoho.com/embed/9a6054c98fd2ad4047021cff76fee38773c34a35234fa42d426b9510864356a68cabcad57cbbb1a0?title=Kevin_Calendar&type=1&l=en&tz=America/Los_Angeles&sh=[0,0]&v=1')" />Month
  </form>

</body>

</html>


@Pekka นั่นแหละจึงเป็นความคิดเห็น
mbq

@mbq ไม่ฉันหมายความว่ามันเป็นความคิดที่แย่มากในสถานการณ์นี้ ดูเหมือนว่า OP จะฝังโค้ดจากบริการภายนอก คุณไม่สามารถดึงข้อมูลนั้นโดยใช้ AJAX ได้ตั้งแต่แรกเนื่องจากการรักษาความปลอดภัยข้ามโดเมนและแม้ว่าคุณจะทำได้ แต่การมี HTML และใส่ลงใน DIV จะไม่ทำงานเนื่องจากอาจมีการอ้างอิงที่สัมพันธ์กับรูปภาพและสไตล์ชีตและ ดังกล่าว IFrames เป็นสิ่งที่ต้องไปที่นี่จริงๆฉันคิดว่า
Pekka

@Pekka ฉันเห็นด้วย; ฉันพลาดส่วนบริการระยะไกลนั้น ฉันได้ลบความคิดเห็นเพื่อไม่ให้คนอื่นสับสน
mbq

ทำไม DOSE'NT WORK code ด้านบนในเบราว์เซอร์ใด ๆ ????
harix

คำตอบ:


127

ในกรณีนี้อาจเป็นเพราะคุณใช้วงเล็บผิดที่นี่:

document.getElementById['calendar'].src = loc;

ควรจะเป็น

document.getElementById('calendar').src = loc;

11
@shinjuo onselectไม่ใช่แอตทริบิวต์ที่ถูกต้องที่จะใช้ที่นี่ คุณอาจต้องการใช้onclick- โปรดสังเกตว่าจะไม่เริ่มทำงานหากผู้ใช้ใช้แป้นพิมพ์
Pekka

นั่นคือสิ่งที่มันเป็น ขอบคุณ. เหตุผลที่ฉันเลือกเลือกก็เพราะฉันคิดว่าถ้ามีคนแท็บผ่านและกดเว้นวรรคแทนการคลิกเมาส์มันจะยังคงเปลี่ยนไป
shinjuo

@shinjuo ใช่นั่นเป็นความคิดที่ดี ฉันคิดว่าคุณต้องใช้รูปแบบบางอย่างonchangeสำหรับสิ่งนั้น
Pekka

2
"onclick" ใช้งานได้กับแป้นพิมพ์ ไม่มีเหตุการณ์ "onselect"
Aaron D

@Aaron มีเหตุการณ์ onselect ที่ไม่ได้มาตรฐาน แต่เป็นการเลือกข้อความ หากใช้onclickงานได้กับการเปิด / ปิดปุ่มตัวเลือกแสดงว่าทุกอย่างแก้ไขได้ดี!
Pekka

67

บางทีนี่อาจเป็นประโยชน์ ... มันเป็น html ธรรมดา - ไม่มีจาวาสคริปต์:

<p>Click on link bellow to change iframe content:</p>
<a href="http://www.bing.com" target="search_iframe">Bing</a> -
<a href="http://en.wikipedia.org" target="search_iframe">Wikipedia</a> -
<a href="http://google.com" target="search_iframe">Google</a> (not allowed in inframe)

<iframe src="http://en.wikipedia.org" width="100%" height="100%" name="search_iframe"></iframe>

โดยวิธีการที่บางไซต์ไม่อนุญาตให้คุณเปิดใน iframe (เหตุผลด้านความปลอดภัย - clickjacking)


2
ช่วยอธิบายได้ไหมว่าทำไม " google.com " ไม่อนุญาตให้ใช้อินเฟรมและคำแนะนำใด ๆ ที่จะทำให้ใช้งานได้ (ต้องไม่ใช่ iframe แต่เป็นแบบเดียวกัน) ชื่นชมมาก.
Fuevo

2
@ hikaru89 นี่เป็นการตอบช้า ... คุณไม่สามารถ "ทำให้" ใช้ได้ ไม่อนุญาตให้ใช้ใน iframe โดยมีจุดประสงค์ google ทำสิ่งนี้ด้วยเหตุผลหลายประการด้วยตัวเอง
Mister SirCode


9

ต้องonselect onclickวิธีนี้จะใช้ได้กับผู้ใช้แป้นพิมพ์

ฉันขอแนะนำให้เพิ่ม<label>แท็กในข้อความ "วัน" "เดือน" และ "ปี" เพื่อให้คลิกได้ง่ายขึ้น รหัสตัวอย่าง:

<input id="day" name="calendarSelection" type="radio" onclick="go('http://calendar.zoho.com/embed/9a6054c98fd2ad4047021cff76fee38773c34a35234fa42d426b9510864356a68cabcad57cbbb1a0?title=Kevin_Calendar&type=1&l=en&tz=America/Los_Angeles&sh=[0,0]&v=1')"/><label for="day">Day</label>

ฉันขอแนะนำให้ลบช่องว่างระหว่างแอตทริบิวต์onclickและค่าแม้ว่าเบราว์เซอร์จะสามารถแยกวิเคราะห์ได้:

<input name="calendarSelection" type="radio" onclick = "go('http://calendar.zoho.com/embed/9a6054c98fd2ad4047021cff76fee38773c34a35234fa42d426b9510864356a68cabcad57cbbb1a0?title=Kevin_Calendar&type=1&l=en&tz=America/Los_Angeles&sh=[0,0]&v=1')"/>Day

ควรจะเป็น:

<input name="calendarSelection" type="radio" onclick="go('http://calendar.zoho.com/embed/9a6054c98fd2ad4047021cff76fee38773c34a35234fa42d426b9510864356a68cabcad57cbbb1a0?title=Kevin_Calendar&type=1&l=en&tz=America/Los_Angeles&sh=[0,0]&v=1')"/>Day

2
@nalply - ฉันไม่เข้าใจการลงคะแนนของคุณ ปัญหารากไม่ใช่ช่องว่างซึ่งฉันบอกว่าควรเปลี่ยน ปัญหาคือ onselect ควรคลิก โปรดทราบว่าคำตอบอื่น ๆ ของ Pekka ไม่สามารถแก้ปัญหาได้ ฉันจะเรียงลำดับคำตอบใหม่เพื่อให้ชัดเจนขึ้น
Aaron D

ฉันลบการโหวตลงคะแนนเนื่องจากการแก้ไขใหม่ของคุณชัดเจนกว่าเดิม
nalply


2

นี่คือรหัสที่อัปเดตของฉัน ทำงานได้ดีและสามารถช่วยคุณได้

<head>
  <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
  <title>Untitled 1</title>
  <script type="text/javascript" src="http://code.jquery.com/jquery-1.8.2.js"></script>
  <script type="text/javascript">
  function go(loc) {
    document.getElementById('calendar').src = loc;
  }
  </script>
</head>

<body>
  <iframe id="calendar" src="about:blank" width="1000" height="450" frameborder="0" scrolling="no"></iframe>

  <form method="post">
    <input name="calendarSelection" type="radio" onclick="go('http://calendar.zoho.com/embed/9a6054c98fd2ad4047021cff76fee38773c34a35234fa42d426b9510864356a68cabcad57cbbb1a0?title=Kevin_Calendar&type=1&l=en&tz=America/Los_Angeles&sh=[0,0]&v=1')" />Day
    <input name="calendarSelection" type="radio" onclick="go('http://calendar.zoho.com/embed/9a6054c98fd2ad4047021cff76fee38773c34a35234fa42d426b9510864356a68cabcad57cbbb1a0?title=Kevin_Calendar&type=1&l=en&tz=America/Los_Angeles&sh=[0,0]&v=1')" />Week
    <input name="calendarSelection" type="radio" onclick="go('http://calendar.zoho.com/embed/9a6054c98fd2ad4047021cff76fee38773c34a35234fa42d426b9510864356a68cabcad57cbbb1a0?title=Kevin_Calendar&type=1&l=en&tz=America/Los_Angeles&sh=[0,0]&v=1')" />Month
  </form>

</body>

</html>

0

เปลี่ยนonselectเป็นonchangeอินพุตและการใช้งาน

calendar.src = loc


-2

คุณสามารถแก้ได้โดยสร้าง iframe ในรูปแบบจาวาสคริปต์

  document.write(" <iframe  id='frame' name='frame' src='" + srcstring + "' width='600'  height='315'   allowfullscreen></iframe>");
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.