在iframe外打开一个弹出窗口,但链接在iframe内

时间:2013-05-10 05:21:09

标签: javascript jquery

在html页面中,我包含了一个iFrame。

在iFrame中,有一个链接,

<a href="#" class="modal {targetelement:'#newstyle',closetext:'Close details',opentext:'View details'}">open window</a>

如果我在父窗口上添加链接和弹出html,它的工作正常。

但如果我在iframe弹出窗口内添加链接html没有打开。

我的确切要求:打开iframe上方的弹出窗口。

我可以移动弹出式html(在iframe或父页面内)的位置,但不能改变<a href="#" id="modelboxnew">open window</a>的位置,它应该只在iframe中

这是我的弹出窗口

<div  id="newstyle" > xyax text ..my popup html </div>

2 个答案:

答案 0 :(得分:3)

你的iframe实际上是一个完全不同的页面,所以它可能无法正常工作,因为你的模态javascript在iframe的页面中不存在。话虽如此,即使你将所有的javascript移动到iframe中,从那里推出模态会使它陷入iframe中。

相反,您希望在父窗口中使用所有javascript和modal html / css内容,然后从iframe链接调用父窗口中存在的弹出启动函数。因此,在不知道您的确切代码或您正在使用的框架的情况下,简单的基本思想是执行以下操作(假设您将问题标记为jquery)...

在主窗口中:

<script type="text/javascript" >
    function showPopup() {
        $("#newstyle").dialog();
    }
</script>
...
<div id="newstyle" > xyax text ..my popup html </div>

在你的模态中:

<script type="text/javascript">
    $(function() {
        $("#modelboxnew").click(function() {
            parent.showPopup();
        });
    });
</script>
...
<a href="#" id="modelboxnew" >open window</a>

请注意,您需要控制主页面和iframe和他们需要从同一个域托管,以免被浏览器的安全性阻止。

答案 1 :(得分:0)

当我在制作一个帖子风格的提要对话框时我遇到了这个,我会点击“心”,它会显示喜欢它的人的iframe。弹出对话框将显示用户点击图片的时间,并为其提供弹出窗口,其中包含指向该图片的个人资料页面的链接以及指向消息的链接。我将一个变量传递给父iframe以使链接起作用。 这是我使用的弹出式示例:https://www.w3schools.com/howto/tryit.asp?filename=tryhow_js_popup

在我的外部iframe中,我将弹出窗口放在iframe旁边,图片正在渲染。然后我用java来触发它。我唯一要做的就是将我在喜欢的帖子iframe中留下的javascript部分更改为弹出容器的新位置。 java调用在mysql结果循环阶段呈现。

<?php 

   if ($count>0){
   echo '<div style="max-width:10em;"><table border=1 style=" border-color:#696969;">';
    while ($data = $result->fetch_row()) {
             echo '<tr>';
       for ($m=0; $m<$result->field_count; $m++) {
       if ($m=="0"){
       $picSrc= $data[$m]; 
         }else if ($m=="1"){
       $usrName=$data[$m];
   }else if ($m=="2"){
    $userRec=  $data[$m];
           }
  }
    echo '<td style="background-color:#eac3a8;"><img src="'.$picSrc.'"  onclick="myFunction('.$userRec.','.$usrName.')"> <br>';                                        
        echo '</tr>';
       }
        echo '</table></div>';
           $result->close();
            } else {
           echo "No one has loved this posted";
             }

  // since I am rendering dynamically, I need to encapsulate the JavaScript into php, and pass the link html to the popup. 
   //$pstId is my id for the posting in the feed
echo '<script>
  function myFunction(a,b) {
     var userRec=a;
     var usrName=b;
     var links=" <a href=\'visitprofile.php?usr="+userRec+"\' target=\'_blank\'>Visit "+ usrName + "\'s Profile</a> <br> <a href=\'messagethem.php?usr="+userRec+"\' target=\'_blank\'>Send  "+ usrName +"a message </a>";
     var popup = parent.document.getElementById("'.$pstId.'");
      popup.innerHTML=links;
     popup.classList.toggle("show");
   }
</script>';

这是在父iframe中:

 <style>
   /* Popup container - can be anything you want */
   .popup {
          position: relative;
          display: inline-block;
          cursor: pointer;
          -webkit-user-select: none;
          -moz-user-select: none;
          -ms-user-select: none;
           user-select: none;
           }

   /* The actual popup */
   .popup .popuptext {
                       visibility: hidden;
                       width: 160px;
                       background-color: #555;
                       color: #fff;
                       text-align: center;
                       border-radius: 6px;
                       padding: 8px 0;
                       position: absolute;
                       z-index: 1;
                       bottom: 125%;
                       left: 50%;
                       margin-left: -80px;
                       }

    /* Popup arrow */
    .popup .popuptext::after {
                               content: "";
                               position: absolute;
                               top: 100%;
                               left: 50%;
                               margin-left: -5px;
                               border-width: 5px;
                               border-style: solid;
                               border-color: #555 transparent transparent transparent;
                                   }

     /* Toggle this class - hide and show the popup */
  .popup .show {
   visibility: visible;

    }


    </style>

 // then the span id is dynamically generated.

      <div class="popup"><span class="popuptext" id="myPopupxs43vbty"></span></div>