Toon posts:

[JavaScript]Escapen lokaal bestand + pad

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met een intranet en 1 optie is dat de gebruiker op een link kan klikken en dan een Excel of Word document wordt geopend in Excel of Word.
Omdat standaard deze bestanden in de MSIE Viewer worden geopend, ben ik bezig met een javascript die wel Excel opent.

Nu gaat het fout bij het doorgeven van de bestandsnaam.
Een voorbeeld van een bestandsnaam is:
code:
1
X:\marketing en verkoop\klanten\offertes\2006\test.xls


Mijn JavaScript:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
window.onerror=fnErrorTrap;

function openOfficeDocument(bestand)
{
    if (!window.ActiveXObject)
    { 
        alert("Deze browser ondersteunt de optie niet om Office documenten te openen, gebruik hiervoor MSIE.");
        return false;
    }
    //Splits obv extentie:
  bestand = bestand.toLowerCase();
  var ext = bestand.substring(bestand.lastIndexOf(".")+1, bestand.length);
  if(ext=="xls")    
  {
    openExcel(bestand);
  }
  return true;
}

function fnErrorTrap(sMsg, sUrl, sLine)
{
    alert('Error: ' + sMsg + ' Line:' + sLine);
    return false;
}

function openExcel(bestand)
{
// Create the Excel application object.
oExcel = new ActiveXObject("Excel.Application");
    
// Open bestand:
oExcel.Workbooks.Open(bestand);
    
// Make Excel visible.
oExcel.Visible = true;  
    
//Opruimen:
oExcel = "";
}


Nu gaat het fout bij het doorgeven van bestand naar openExcel. De \, spaties en zelfs \200 (van de submap \2006\) worden geescaped.
Als ik de locatie hard-coded invoer gaat het ook fout:
JavaScript:
1
oExcel.Workbooks.Open("X:\marketing en verkoop\klanten\offertes\2006\test.xls");


Nu ben ik al een tijdje aan het prutsen met escape() en unescape() maar zonder succes.

Wie kan mij in de juiste richting sturen?

--
Paul

  • Juup
  • Registratie: Februari 2000
  • Niet online
De backslash is een escape character in Javascript dus die moet je dubbel neerzetten om 1 backslash in je string te krijgen:
JavaScript:
1
oExcel.Workbooks.Open("X:\\marketing en verkoop\\klanten\\offertes\\2006\\test.xls");

alternatief is misschien het file:// protocol:
JavaScript:
1
oExcel.Workbooks.Open("file:///X:/marketing%20en%20verkoop/klanten/offertes/2006/test.xls");

[ Voor 26% gewijzigd door Juup op 12-10-2006 10:44 ]

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Waar hoort mijn topic?

PRG -> WEB

Overigens is dat prima te googlen lijkt me zo.

[ Voor 37% gewijzigd door RobIII op 12-10-2006 10:46 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Topicstarter
Uiteraard had ik al gegoogled, maar ik kwam er niet uit met de backslash.
Ik had ook op het PRG forum gezocht en omdat daar veel topics over JavaScript zijn/waren heb ik de mijne daar ook geplaatst. Ik zal dat in het vervolg niet weer doen ;)

Maar goed. De oplossing.
Omdat de link via een SQL-statement uit een MySQL database komt heb ik het daar opgelost.
Ik heb de link wel omgezet naar het file:// protocol en nu werkt het.
Voor de volledigheid hier mijn code:
SQL:
1
2
3
select o.ID
, if (o.Document is null, '', concat('<a href=\"#Offertes\" OnClick=\"openOfficeDocument(\'file:///', replace(replace(o.Document,' ' , '%20'), char(92), '/'), '\');\">', o.Document, '</a>')) as Document
from offertes as o;

HTML:
1
<a href="#Offertes" OnClick="openOfficeDocument('file:///X:/marketing%20en%20verkoop/klanten/offertes/2006/test.xls');">X:\marketing en verkoop\klanten\offertes\2006\test.xls</a>

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
window.onerror=fnErrorTrap;

function openOfficeDocument(bestand)
{
    if (!window.ActiveXObject)
    { 
        alert("Deze browser ondersteunt de optie niet om Office documenten te openen, gebruik hiervoor MSIE.");
        return false;
    }
    //Splits obv extentie:
  bestand = bestand.toLowerCase();
  var ext = bestand.substring(bestand.lastIndexOf(".")+1, bestand.length);
    
    if(ext=="xls")  
    {
        openExcel(bestand);
    }
    return true;
}

function fnErrorTrap(sMsg, sUrl, sLine)
{
    alert("Error: " + sMsg + " Line: " + sLine);
    return false;
}

function openExcel(bestand)
{
    // Create the Excel application object.
    oExcel = new ActiveXObject("Excel.Application");
    
    // Open bestand:
    oExcel.Workbooks.Open(unescape(bestand));
    
    // Make Excel visible.
    oExcel.Visible = true;  
    
    //Opruimen:
    oExcel = "";
}


Mocht iemand een oplossing weten hoe dit in FireFox te doen, dan hoor ik het graag.

--
Paul

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Het is IMHO nogal ranzig om in je query de output te gaan zitten formatteren. Waarom doe je dat niet in PHP (of ASP/... of waar werk je mee?)

Verder is het voor zover ik weet niet mogelijk in FireFox om met ActiveX objecten te werken en gaat het dus zowieso niet werken. Je kunt wel natuurlijk gewoon de href gebruiken om te linken naar het bestand (wederom middels het file:// protocol) en dan zou Excel gewoon automagisch moeten openen (ook onder MSIE overigens) dus ik zie heel de noodzaak voor javascript hier niet zo ...

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Topicstarter
De reden dat ik in de query de output formatteer is dat ik de query meegeef met een generieke functie die er weer een overzicht van maakt.
Als ik het in php wil doen dan moet ik voor elk overzicht een eigen functie maken.
Voor mij werkt dit het beste en ik heb beide opties geprobeerd.

Als ik alleen het file:// protocol gebruik, wordt het document in MSIE geopend omdat dat standaard zo geregeld is. Als ik er voor wil zorgen dat .doc bestanden in Word en .xls bestanden in Excel worden geopend moet ik alle clients bij langs. Met het javascriptje hoeft dat niet.

Voor mijn situatie werkt dit het beste. Uiteraard zijn er meer wegen die naar Rome leiden. ;)

Bedankt allemaal voor het meedenken, ik kan weer verder.
Dat van FF zou leuk zijn maar is niet noodzakelijk. Ik ben de enige binnen het bedrijf die FF gebruikt. :P

--
Paul
Pagina: 1