Vraag jQuery / iframe werkt niet in Chrome


Ik heb hier een facebook-fanpagina gemaakt:

http://www.facebook.com/apps/application.php?id=120196931351044&v=app_120196931351044

Het bevat iframes om bepaalde pagina's / afbeeldingsgalerieën te bellen die jQuery gebruiken. Alles werkt prima in alle browsers behalve Chrome. Er verschijnt niets in Chrome van de iframes, alleen een lege witte achtergrond.

Ik probeerde het te gebruiken load evenement in plaats van ready handler maar nog steeds geen geluk.
Heeft iemand hetzelfde probleem met chroom gezien?

Uw hulp wordt zeer op prijs gesteld.

De grote afbeeldingen in de header komen door iframe, een pagina met jQuery.

Bijwerken:

Zoals te zien is in de reacties hieronder, lijkt het zelfs in Safari niet te werken.

Update 2

Dezelfde code lijkt in Chrome te werken wanneer het buiten het iframe wordt uitgevoerd, hier is de link naar werkende pagina:

http://jsbin.com/esame4/4

Update 3:

Het lijkt erop dat dit probleem aanhoudt in chrome bij het gebruik van iframes zoals hier te zien is:

http://www.google.am/support/forum/p/Chrome/thread?tid=2c81c3e3fd99b388&hl=en
http://forums.sharethis.com/topic.php?id=2742


15
2018-06-23 17:21


oorsprong


antwoorden:


De oplossing is eigenlijk eenvoudig. Als u wilt dat uw iframe-spullen goed worden weergegeven in Chrome wanneer u een Facebook-pagina / app ziet, moet u inhoud of eigenschappen van een beveiligde server bellen.

U MOET ervoor zorgen dat al uw vereiste bestanden en mappen zoals de CSS-, JS- en afbeeldingsbestanden zich in een beveiligde map bevinden.

  1. Hiervoor hebt u een SSL-certificaat voor uw domein nodig.

  2. Wijzig uw htaccess-bestand en wijzig de herschrijftoestand om SSL voor alle of specifieke mappen te forceren, vooral wanneer u variabelen gebruikt om de bestanden te bellen. Als u de absolute URL gebruikt, wijzigt u deze in https.

Ik hoop dat dit helpt!


4
2017-11-13 15:29



Als het een probleem is dat document.ready niet wordt aangeroepen in het iframe omdat de pagina op dat moment al is geladen, is het mogelijk om in plaats daarvan het javascript te plaatsen dat u wilt laden onder aan de nieuwe pagina in plaats van in het document. klaar, zodat het wordt geladen zodra al het andere is geladen? Ik heb iets soortgelijks gedaan op sommige pagina's, zoals een beetje JavaScript boven aan de pagina plaatsen om een ​​laadafbeelding weer te geven, en een ander deel onderaan om het te verbergen, enz ...

<html>
    <head><script>function pop(){alert("Page Loaded");}</script></head>
    <body>Lorum ipsum...</body>
    <script>pop();</script>
</html>

2
2017-07-02 20:48



Een paar suggesties, meestal gerelateerd aan uw Javascript-instellingen op de gallery.php-pagina:

Mijn eerste instinct is om te zeggen dat het een bug (of zelfs een bedoelde reactie) is in de manier waarop Chrome / WebKit cross-site scripting en andere soortgelijke potentiële veiligheidslekken afhandelt. Ik weet dat sommige gaten in de beveiliging betrekking hebben op het uitvoeren van script vanuit een iframe (zoals deze voormalige Chrome-bug verwijst naar).

Misschien heeft het iets te maken met je verwijzingen naar je jquery.min.js van ajax.googleapis.com in plaats van het te hosten op hetzelfde domein als je gallery.php-pagina. Probeer een kopie van jquery.min.js op uw server te plaatsen en daar naar toe te linken en te kijken of het helpt.

Probeer ook de jQuery-bibliotheek te verplaatsen <link>tag in je <head> tag, want dat is een meer geschikte plaats daarvoor.

Je zou ook kunnen proberen de jQuery Innerfade-bibliotheek om je roterende banner te laten draaien. Het zou je script opruimen en, wie weet, misschien de browser ervan overtuigen dat je niet probeert een gat in de beveiliging te misbruiken.

Als u niet kunt overschakelen naar het gebruik van Innerfade, wijzigt u op zijn minst uw JavaScript-variabelen zodat deze niet worden genoemd met een $ (bijvoorbeeld uw variabele "$ curvak" wijzigen in "curbox"). Het kan verder alle verwarring wegnemen die de browser mogelijk heeft met uw Javascript. Op zijn minst is het een goede gewoonte, vooral als je jQuery gebruikt.


1
2018-06-28 15:22



Hallo sAc, ik heb het geprobeerd in Chrome 5.0.375.86 en het werkte. Omdat Safari en Chrome dezelfde webmotor (webkit) gebruiken, zou het hetzelfde probleem kunnen erven. Aangezien het een JavaScript-probleem is, gebruikt Chrome nu google V8 JavaScript-engine in plaats van JavaScriptCore (standaard JavaScript-engine van webkit). Dit probleem lijkt te zijn opgelost in de laatste versies van Chrome. Misschien kan het een probleem zijn bij JavaScriptCore om de gereed- of laadgebeurtenissen niet uit te voeren, omdat DOM al in het document is geladen voordat het iframe is geconstrueerd. Een tijdelijke oplossing kan een vlag worden ingesteld om te controleren of de inhoud is geïnitialiseerd. Zet een timer van vijf tot tien seconden met setTimeOut om deze vlag te controleren. Als dit niet is geïnitialiseerd, moet u dit op de callback van setTimeOut bellen. Dus als safari de lading of de kant en klare gebeurtenissen niet roept, kan de setTimeOut het voor je doen. Plaats het natuurlijk niet in je jQuery-laag. Zet het als een pure javascript-tag in je HTML om te worden geladen door het iFrame.


1
2017-07-02 19:14



Controleer de antwoordheaders op de pagina die u probeert te plaatsen in de iframe. U bent op zoek naar een koptekst genaamd x frame-options.

Dit is een nieuwe beveiligingsoptie die de browser laat weten de framecontent niet te laden. Veel webservers voegen dit standaard toe.

Het is de moeite waard om het te controleren.


0
2018-06-28 15:34



Reden om niet te werken is omdat de browser het iframe als onveilig markeert. Om dit op te lossen, voeg je gewoon een karakterset toe aan de kop van de pagina die je wilt weergeven:

< head ><br/>
< meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"/><br/>
< /head><br/>

0
2018-01-05 17:08