2015-01-20 4 views
1

всем. У меня следующая ситуация:

у меня есть: http://example.com/ и http://example.com/new

В example.com, у меня есть формы, которые я загружаю в example.com/new области с FancyBox IFRAME.

В моей форме в основном отображаются поля для ввода пользователем своих псевдослучайных данных, таких как имя, телефон и т. Д. После того, как он представит это, я показываю некоторые условия пользовательского соглашения, которые поступают из базы данных и флажок для пользователя сказать, что он согласен с условиями.

После того, как он проверит и отправит, я хочу предупредить какое-то сообщение о sucess и facybox modal/iframe, чтобы закрыть, и вот оно.

На странице формы я загрузил jquery и bootstrap. Таким образом, когда пользователь согласен, я печатаю:

<?php 
    echo " 
      <script> 
      alert('Some success message!'); 

      $(document).ready(function(){ 
       parent.$.fancybox.close(); 
      }); 
     </script> 
    "; 
?> 

У меня есть три формы, в одном, работает в двух других, я получаю:

Error: Permission denied to access property '$' 

Единственное различие между формой, которая работает и два других - это то, что в той форме, которая работает, у меня нет условий соглашения, поступающих из базы данных, только флажок.

Я мог бы разместить здесь весь свой код, но это был бы гигантский вопрос. Но если вам нужно, я могу обновить.

Извините за мой английский и простите меня, если я не понял.

UPDATE:

<!DOCTYPE html> 
<html> 
    <head> 
    <meta charset="utf-8"> 
    <?php 
     /* Connect with DB */ 
     require_once('require/conectar.php'); 

     if(!empty($_POST)) 
      foreach($_POST as $k => $v) 
       $$k = $v; 
    ?> 

    <script type="text/javascript" src="http://example.com/new/assets/js/jquery.js"></script> 
</head> 
<body> 
<?php if(!isset($agree) and !isset($next)):  ?> 
    <h1>The form</h1> 
    <form method="post" action=""> 
     <label>Your name:</label> 
     <input type="text" name="name"> 
     <br> 
     <label>Your email:</label> 
     <input type="text" name="email"> 
     <br> 
     <input type="submit" name="next"> 
    </form> 
    <?php 
     else: 
      $error = (!isset($name)) ? true : false; 
      $error = (!isset($name)) ? true : false; 

      if($error) 
      { 
       echo '<script>You must fill all fields before submit.</script>'; 
       exit; 
      } 

      $qrr = mysql_query("SELECT * FROM `terms`"); 
      $terms = mysql_fetch_object($qrr); 
    ?> 
     <h1>Terms:</h1> 
     <?php echo $terms->content; ?> 
     <form method="post" action=""> 
      <input type="hidden" value="<?php echo $name; ?>" name="name"> 
      <input type="hidden" value="<?php echo $email; ?>" name="email"> 
      <input type="checkbox" value="1" name="accept"> I agree. 
      <input type="submit" name="agree"> 
     </form> 
    <?php 
     endif; 
     if(isset($agree)) 
     { 
      /* 
       Here i mail me the user data. 
      */ 

      echo " 
       <script> 
       alert('Soliciação Realizada com sucesso!'); 
       $(document).ready(function(){ 
        parent.$.fancybox.close(); 
       }); 
       </script> 
      "; 
     }else 
     { 
      echo "<script>alert('You need to agree with the terms to proceed.');</script>"; 
     } 
    ?> 
    </body> 
</html> 
+0

В зависимости от конкретных доменов доступ к одному кадру из другого может быть или не быть возможен. – Pointy

+0

должно быть другое различие, нам нужно будет увидеть весь код, чтобы мы могли сказать. Посмотрите, можете ли вы сделать минимальный пример, который все еще вызывает проблему. По мере того, как вы удаляете материал, вы можете понять, какая линия действительно вызвала его. – lukevp

+0

Вам нужно опубликовать наименьший пример кода, который вызывает проблему, или вы действительно просите людей догадаться, что проблема может быть из сотен возможностей. – Klors

ответ

0

Это вещь безопасности браузера. Хотя есть несколько способов обойти это, лучше всего использовать postMessage API.

На вашей родительской странице example.com, добавить некоторый код, как это:

function handleMessageFromiFrame(event) { 
    alert('Some success message: ' + event.data); 
    //$.fancybox.close(); 
} 

window.addEventListener("message", handleMessageFromiFrame, false); 

И тогда на вашего ребенка example.com/new фрейма, добавьте код, как это:

var parentOrigin = "*"; // set to http://example.com/ or whatever for added security. 

function sendMessageToParent(){ 
    parent.postMessage("button clicked", parentOrigin); 
} 

$('#submit-btn').click(sendMessageToParent); 

Вот пример этого в действии:

При нажатии на кнопку на странице ребенка, он использует postMessage уведомить родителей. Затем родитель прислушивается к сообщению и выполняет любое действие, которое вы хотите.

Смежные вопросы