2016-06-02 14 views
0

Ich weiß, diese Antwort wurde wiederholt, aber niemand hat für mich gearbeitet, ich weiß nicht warum :(. Ich habe ein div-Tag, das ein Skript-Tag (von einer Website) enthält und lädt eine Art von Rahmen.Dieser Rahmen zeigt einen Monitor dank mehrerer Variablen, wie die ID (die am wichtigsten ist). Also, ich möchte alle 5 Sekunden, die ID ändert, um einen anderen Monitor anzuzeigen.Inhalt von einem div mit jquery aktualisieren

Das Problem ist das in meinem Refresh-Code ich benutze die Methode load(), aber in Firefox bekomme ich diese Warnung "Ein Aufruf von document.write() von einem asynchron geladenen externen Skript wurde ignoriert." und in Chrom bekomme ich diese "Failed "Schreiben" auf "Dokument" ausführen: Es ist nicht möglich, von einem asynchron geladenen externen Skript in ein Dokument zu schreiben, wenn es nicht explizit geöffnet wird. "

Dies ist mein Code:

<script type="text/javascript"> 
    var id = ["id1", "id2", "id3"];   
     var number; 
     var i = 0; 
     function change(){ 

      if(i<id.length){ 
       number = id[i]; 
       i++; 
      }else if(i>=id.length){ 
       clearInterval(); 
       number = id[i]; 
       console.log("start again"); 
      }     
      return number; 
     } 

     function refresh(){ 
      $('#midStag').load("myUrl" + ' #midStag'); 
     } 

    setInterval(refresh, 5000); 
</script> 

<div id="midStag"> 
<script type="text/javascript"> 
    //I only put the id because is the more important variable 
    //and the only one that I am changing 
    id = cambio(); 
    /*more variables like width or height*/ 

</script> 
<script type="text/javascript" src="http://dashboard.monitis.com/sharedModule/shareModule.js"></script> 

ich es wirklich brauchen, bitte. Jede Hilfe, die ich würde das schätzen. Wenn du etwas nicht verstehst, sag es mir und ich korrigiere es. Vielen Dank.

+0

ersetzen Wenn Sie ein wenig [jsfiddle] (https://jsfiddle.net/) zur Verfügung stellen kann. Es wird leichter sein, Ihnen zu helfen :) –

+0

Die Diskussion kann mit Ihrem Problem zusammenhängen: http://stackoverflow.com/questions/24297829/execute-write-on-doc-it-isnt-possible-to-write-into -a-document-from-an-asynchr – Gadget

+0

dies könnte funktionieren try $ ("# panel"). toggle().Umschalten(); –

Antwort

0

Dies ist, weil das shareModule.js Skript eine document.write Anweisung am Ende hat. Und da Sie dieses Skript erneut laden, wenn Sie .load() verwenden, erhalten Sie den Fehler, da das Dokument geschlossen wurde und das Skript asynchron geladen wird.

Sie könnten ein paar Dinge tun, um dieses Problem beheben:

    das Skript Rewrite
  1. nicht document.write zu verwenden, aber das erfordert den Zugriff auf den Server auf
  2. Speichern Sie das Skript lokal gespeichert ist und ändern Sie es zu nicht verwenden document.write. Die einzige Konsequenz wäre, dass Sie das Skript manuell aktualisieren müssten, wenn sharedModule.js auf dem Server aktualisiert wird.
  3. Bearbeiten Sie die URL des Frames, um die benötigten Informationen zu ersetzen. Ersetzen Sie Ihre neue ID durch die alte. Setzen Sie dann den Quellcode mit der neuen URL.

    var src = $("span iframe").prop("src"); 
    src = src.replace(/publicKey=\d+/,"publicKey="+newKey); 
    $("span iframe").prop("src",src); 
    
  4. document.write Ersetzen mit einer Funktion, die in einer HTML-freundlichen Weise

    document.write = function(markup){ 
        document.currentScript.parentElement.insertAdjacentHTML('beforeend',markup); 
    }; 
    

Demo ersetzt document.write

monitis_embed_module_width = 100; 
 
monitis_embed_module_height = 100; 
 
monitis_embed_module_id = 300; 
 
document.write = function(markup){ 
 
    document.currentScript.parentElement.insertAdjacentHTML('beforeend',markup); 
 
}; 
 

 
var div = document.getElementById("test"); 
 
setTimeout(function(){ 
 
    var s = document.createElement("script"); 
 
    s.src = "http://dashboard.monitis.com/sharedModule/shareModule.js"; 
 
    div.innerHTML = ""; 
 
    div.appendChild(s); 
 
},1000);
<div id="test"> 
 
    Simulating load... 
 
</div>

einfügt

Demo src

var div = document.getElementById("test"); 
 
var frame = null; 
 
function reloadFrame(){ 
 
    frame = frame || div.querySelector("iframe"); 
 
    var src = frame.src; 
 
    var id = Date.now(); 
 
    frame.src = src.replace(/publicKey=\d+/,"publicKey="+id); 
 
} 
 

 
setTimeout(reloadFrame,2000);
<div id="test"> 
 
    <script> 
 
    monitis_embed_module_width = 100; 
 
    monitis_embed_module_height = 100; 
 
    monitis_embed_module_id = 300; 
 
    </script> 
 
    <script src="http://dashboard.monitis.com/sharedModule/shareModule.js"></script> 
 
</div>

+0

Zunächst einmal vielen Dank für Ihre Antwort. Zweitens, die erste und die zweite Sache, die Sie vorschlagen, funktioniert nicht für mich, weil ich keinen Zugriff auf sharemodule.js habe. Der dritte funktioniert auch nicht, weil ich für jedes Bild keine URL habe. Aber die vierte, die ersetzen document.write, es funktioniert, aber das Problem ist, dass immer die gleiche ID ist, nie ändern. Und derjenige, der src ersetzt, tut nichts. Außerdem, wenn ich die letzten beiden mische, funktioniert es nicht. Also, die beste Option ist die vierte, aber es funktioniert nicht in Ordnung :( –

+0

Sie haben URL für den Rahmen. Sie greifen nur den Rahmen, der erstellt wird und holen Sie die 'src' wie gezeigt und ersetzen Sie den PublicKey-Wert ist die "monitis_embed_module_id", die Sie in Ihrem eigenen Javascript gesetzt haben. Was die vierte Option betrifft, würde das keinen Einfluss auf die Änderung der ID haben. –

+0

Es tut mir leid, aber ich verstehe Sie nicht. Beziehen Sie sich auf die 3. Option? die vierte option, ich wollte das so sagen, das div wird aktualisiert, ändert aber nicht die id, ist also immer gleich. –

Verwandte Themen