Түрі болмаған TypeError: анықталмаған сипаттың 'фантазиясын' оқи алмау - Google Chrome қатесі ғана бар ма?

Мен iframe көрсету үшін қиянатқышты пайдаланып, батырманы басқан кезде оны жабыңыз. Бұл тек сынақ мақсатында ғана. Жабылу функциясы IE және FF ішінде жұмыс істейді, бірақ Chrome емес.

    <title>Test</title>

    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
    <script type="text/javascript" src="fancybox/jquery.fancybox-1.3.4.pack.js"></script>
    <link rel="stylesheet" href="fancybox/jquery.fancybox-1.3.4.css" type="text/css" media="screen" />

    <link rel="stylesheet" type="text/css" href="default.css" />
    <link rel="stylesheet" type="text/css" href="default2.css" />

</head>
<body id="editadd">
    

Create

    <div class="centered">
        
Details

Name: <input type="text" />

        
Add Assignments

stuff

<input type="text" value="stuff" />
 
        
<input type="submit" OnClick="parent.$.fancybox.close();" value="Save"/> <input type="submit" OnClick="parent.$.fancybox.close();" value="Cancel"/> </div> </body>

Сақтау немесе Болдырмау түймешігін басқан кезде ештеңе болмайды (FF және IE жабылады және фокусты алдыңғы бетке қайтарады). Мен не болып жатқанын және қате екенін көру үшін Chrome-дағы Javascript консоліне қарадым:

Түрдің қатесі болмайды: Сипаттың 'фантазия' белгісін анықтай алмайды   (анонимді функция)   onclick

түймесін басыңыз

Сондай-ақ, мен «javascript: window.parent. $.» Деп көрдім. Fancybox.close (); « орнына. Мен google-те сұрақ бере алмаймын (мұнда фантастика форумы орналасқан), себебі қандай да бір себептермен ол кампуста оқшауланады.

1
иә, мен іс жүзінде істеймін. Мен вебкитпен бір нәрсе деп ойладым, өйткені қателерді іздегенде Google нәтижелерінде байқаған нәрсе
қосылды автор Nimchip, көзі
иә, бұл ешқандай сымсыз немесе веб-сервер орнатылмаған жергілікті
қосылды автор Nimchip, көзі
Контролды CTRL + SHIFT + J арқылы шақыру. URL мекенжайы арқылы кіру үшін Құпия JavaScript әрекеті ұқсас хабарды көресіз бе? ?
қосылды автор Rob W, көзі
Сіз оны жергілікті түрде сынап жатырсыз ба? (Urls start width something like file://...)?
қосылды автор zatatatata, көзі

2 жауаптар

Бірдей бастама саясаты арқылы сізде қиындықтар туындады: Жиектелген бет басқа хостта ата-аналық терезе. Менің жауапым екі шешімнен тұрады:

  1. Attaching and handling an onload event at the <iframe>, http://jsfiddle.net/BYssk/1/
  2. Using window.postMessage (see bottom of answer, recommended), http://jsfiddle.net/5fGRj/1/

To deal with this, you've can use one of the following methods. Both methods requires that the page in the frame reloads when it has to be closed. This can be achieved by submitting the form. No onclick handlers are necessary. Preview of both methods: http://jsfiddle.net/BYssk/1/

    1.  If your iFrame is embedded in the page:

<script>
var fancyboxClose = (function(){ //Define a function
    var loaded = 0;    //Define a local, "PRIVATE" counter
    return function(){ //Define a public method 
       //Increases the counter by one, modulo 2:
       //  Every "first" time, the "loaded++" returns an even number -> false
       //  When the page reloads again, the fancybox is submitted. The counter
       //     increases again -> odd number => modulo 2 = 1 => true
        if(loaded++ % 2) $.fancybox.close();
    }
})();
</script>
<iframe src=".." onload="fancyboxClose()"></iframe>

    2.  If your iFrame is dynamically created:

//The code below is executed inside some function. Definitely NOT globally
var loaded = 0;
$("<iframe>")               //Create frame
    .load(function(){       //Bind onload event
        if(loaded++ % 2) $.fancybox.close();
    })
    .attr("src", "...")     //Set src attribute
    .appendTo("body");      //Append the iframe, anywhere. For example: <body>

Бұл әдіс бойынша қозғалтқыш:

  1. Рамка мазмұны жүктелгенде, inload оқиғасы іске қосылады (1).
  2. Пайдаланушы пішінді жібергенде немесе кадрдың ішіндегі бетінен шыққанда load оқиғасы іске қосылады (2).
  3. Сценарий бірінші жүктеу оқиғасында ештеңе жасамайды. Алайда екінші onload оқиға, сценарий $ .fancybox.close() әдісін шақырады.

Баламалы әдіс

Another method consists of using the modern window.postMessage method. It's much more reliable than the previous method, and supported in all modern browsers. Fiddle: http://jsfiddle.net/5fGRj/1/

Негізгі терезеде сценарий:

function closeFancyBox(){
    $.fancybox.close();
}
window.addEventListener("message", closeFancyBox, false);

Жиектелген беттегі қажетті код:

<script>
function initiateClose(){
    parent.postMessage("Close fancybox please.", "*");
   //* should be more specific, for security reasons
   //See https://developer.mozilla.org/en/DOM/window.postMessage
}
</script>
PostMessage method
<input type="submit" value="Inititate 'close'" onclick="initiateClose()">
2
қосылды

Мәселе jQuery 1.9.1 және ескі фантастика. jQuery 1.8.x көмегімен 1.3.xx фэнтезін пайдаланыңыз

or just update the latest version of fancybox 2.1.x http://www.fancyapps.com/fancybox/#license

0
қосылды