[PHP/Javascript] -> foutmelding previewfunctie in IE

Pagina: 1
Acties:

Onderwerpen


Verwijderd

Topicstarter
Beste tweakers,

Doel van mijn script:
ik roep vanuit een rich text editor (http://fieldspar.com/ -> klik op 'rte revamped, standard demo' voor een voorbeeld) een bestand op, genaamd insert_img.php: je raadt het al: hiermee kan ik afbeeldingen invoegen in een textarea. Ik heb het originele javascript een klein beetje aangepast, want ik wil een (automatische) previewfunctie erbij hebben: een gebruiker kan alleen kiezen uit afbeeldingen die reeds in een directory staan (middels een dropdown) en vervolgens een kleine preview hiervan in een iframe zien alvorens de afbeelding ingevoegd wordt.

Het probleem is echter:
de preview functie werkt prima in mozilla, maar in Internet Explorer krijg ik een foutmelding. Nu kan ik foutmeldingen lezen, maar van deze snap ik geen zak. De melding is volgens IE namelijk dat of:
a) ik geen permissies heb om de map /upload/ te lezen (wat mij onzin lijkt, want de chmod is 755);
b) er geen indexbestand aanwezig is in de map /upload/ (dat klopt, maar het toevoegen van een indexbestand biedt geen soelaas: als ik een indexbestand aan de directory toevoeg, krijg ik weliswaar geen foutmelding meer, maar ook geen resultaat te zien...)

Alhier de code, die uit enkele onderdelen bestaat: gezamelijk één bestand:
Allereerst een functie die een lijstje maakt van afbeeldingen in een directory
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
function dir_list($dir)
{
  $dl = array();
  if ($hd = opendir($dir))
  {
    while ($sz = readdir($hd)) { if (preg_match("/^\./",$sz)==0) $dl[] = $sz; }
    closedir($hd);
  }
  asort($dl);
  return $dl;
}
$dirlist = dir_list(" [ allerlei leuke server info ] ... httpdocs/upload/");
En de dropdown functie:
code:
1
2
3
4
5
6
7
8
9
10
function makeimageDropdown ($dirlist) {
echo "<select name=\"imgurl\" id=\"id_imgurl\" onchange=\"window.open(/upload/ + this.options[this.selectedIndex].value,'ipreview')\">\n";
foreach($dirlist as $file)
{
    echo "<option>\n";
    echo "". $file . "\n"; echo "</option>\n";
}
echo "</select>\n";
}
?>
Hieronder komt de rest van de html en een stukje javascript die de gekozen waarden schrijft naar de rte.


De reactie van Vesta hieronder heeft het probleem al opgelost :)

[ Voor 229% gewijzigd door Verwijderd op 01-09-2005 22:59 ]


Verwijderd

Topicstarter
p.s.: als het verhaal niet duidelijk genoeg is en/of iemand heeft behoefte aan screenshots of iets dergelijks, dan roep maar :)

[ Voor 7% gewijzigd door Verwijderd op 01-09-2005 22:17 ]


  • Vesta
  • Registratie: November 2004
  • Niet online
Je post een hoop code, voor ons is het erg lastig om daarin het probleem te vinden. Probeer daarom het probleem te lokaliseren en kijk waar het fout gaat.

Aangezien je met een index alleen een lege pagina krijgt, lijkt het erop dat IE altijd de url /upload/ opvraagt. Omdat je een bestand in deze map opvraagt, zal IE absoluut niets doen met een eventuele index. Daar zal het probleem ook niet liggen.

Kijkend naar de volgende code:
PHP:
1
2
3
4
5
foreach($dirlist as $file)
{
    echo "<option>\n";
    echo "". $file . "\n"; echo "</option>\n";
}

Je geeft de <option> geen value mee, waardoor this.options[this.selectedIndex].value altijd leeg is, of undefined. Dit kun je testen dmv alert(this.options[this.selectedIndex].value). Mozilla neemt dan waarschijnlijk de waarde van de tekst als value, en IE geeft een lege string als value. Probeer eens de volgende code:
PHP:
1
2
3
4
foreach($dirlist as $file)
{
    echo "<option value=\"$file\">$file</option>\n";
}

Verwijderd

Topicstarter
Dat was het... :)


Briljant en goed gezien!

*iets met schaamte en woordblindheid*

[ Voor 31% gewijzigd door Verwijderd op 01-09-2005 23:18 ]


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

code:
1
onchange=\"window.open(/upload/ + this.options[this.selectedIndex].value,'ipreview')\"

daar horen ook quotes om /upload/:
code:
1
onchange=\"window.open('/upload/' + this.options[this.selectedIndex].value,'ipreview')\"

Intentionally left blank


Verwijderd

Topicstarter
tjek en fixed :)

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Dit is trouwens wel een grappig geval, want op zich gaat dit goed:
JavaScript:
1
window.open(/upload/ + 'string');

/upload/ is een reguliere expressie (de slashes zijn de constructor), maar wordt in deze context gecast naar een string - eigenlijk wordt het dus /upload/.toString()
vandaar dat deze fout niet zo snel op zal vallen; was het zoiets geweest:
JavaScript:
1
window.open(/upload + '/string');

dan had je wel een foutmelding gehad ;)

Intentionally left blank


  • Vesta
  • Registratie: November 2004
  • Niet online
Interessant om te zien hoe browsers hiermee omgaan. Het blijkt maar weer dat je altijd quotes moet gebruiken bij strings, dat voorkomt een hoop eigenaardigheden :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
idd :)
Pagina: 1