activeX error opvangen

Status
Niet open voor verdere reacties.

dreammachine

Gebruiker
Lid geworden
19 jul 2008
Berichten
11
Hallo,

Kan iemand mij helpen om de error op te vangen wanneer bij de vraag om interactie toe te staan 'nee' wordt geklikt? Momenteel krijg ik bij onderstaande code de error 'automatiseringsonderdeel kan object niet maken'.


Code:
<html>
<head>
<script language="javascript">
function WriteToFile()
{
var fso = new ActiveXObject("Scripting.FileSystemObject");
var s = fso.CreateTextFile("C:\\Test.txt", true);
s.WriteLine('Hello');
s.Close();
}
</script>
</head>
<body>
<p><input type="button" value="Save" onclick="WriteToFile()"></p>
</body>
</html>
 
gebruik try en catch om die error op te vangen en vermeldt dan dat de beveiliging te streng is:)

Code:
function WriteToFile()
{
  try
  {
    var fso = new ActiveXObject("Scripting.FileSystemObject");
    var s = fso.CreateTextFile("C:\\Test.txt", true);
    s.WriteLine('Hello');
    s.Close();
  }
  catch (e)
  {
    alert("Opslaan mislukt");
  }
}

Maar waarschijnlijk zul je geen toegang krijgen tot de C schrijf (of een andere) waar dan ook. Ik zou het in ieder geval nooit toe staan. Als je niet specifiek iets met bestanden op de harde schrijf wilt doen maar gegevens opslaan, dan kun je beter cookies gebruiken.


/edit:
En het werkt natuurlijk alleen in IE
 
Laatst bewerkt:
Maar waarschijnlijk zul je geen toegang krijgen tot de C schrijf (of een andere) waar dan ook. Ik zou het in ieder geval nooit toe staan. Als je niet specifiek iets met bestanden op de harde schrijf wilt doen maar gegevens opslaan, dan kun je beter cookies gebruiken.

/edit:
En het werkt natuurlijk alleen in IE
geen probleem hoor, is voor eigen gebruik en kan geen gebruik maken van cookies hiervoor.

Hartelijk dank Glest! Ik heb echter nog het volgende probleem:

De code wordt slechts eenmalig uitgevoerd. Ik bedoel als ik het ActiveX object per ongeluk niet activeer, is het niet mogelijk om toch nog bestanden op te slaan, tenzij ik de pagina refresh maar dan ben ik alle gegevens kwijt. Ik blijf steeds de alert "Opslaan mislukt" krijgen.

Ongetwijfeld heb jij hier ook wel een oplossing voor.

Alvast bedankt!

Code:
<html>
<head>
<script language="javascript">
function WriteToFile()
{
  try
  {
    var fso = new ActiveXObject("Scripting.FileSystemObject");
    var s = fso.CreateTextFile("C:\\Test.txt", true);
    s.WriteLine('Hello');
    s.Close();
    alert("Opslaan gelukt!");
  }
  catch (e)
  {
    alert("Opslaan mislukt!");  
      }
}
</script>
</head>
<body>
  <p><input type="text" name="T1" size="20"></p>
  <p><input type="button" value="Knop" name="B1" onclick="WriteToFile();"></p>
</body>
</html>
 
hmm, ik heb nog nooit met ActiveX objects gewerkt maar misschien kun je een ActiveX object vernietigen en weer opnieuw maken? Het lijkt me logisch dat IE dan in ieder geval opnieuw om toestemming vraagt.

Of, je kunt het form submitten naar zichzelf en met javascript alle waardes terugzetten.
 
hmm, ik heb nog nooit met ActiveX objects gewerkt maar misschien kun je een ActiveX object vernietigen en weer opnieuw maken? Het lijkt me logisch dat IE dan in ieder geval opnieuw om toestemming vraagt.

Of, je kunt het form submitten naar zichzelf en met javascript alle waardes terugzetten.

Heb het opgelost door de velden weg te schrijven in een cookie, pagina reload en waarden terug uit cookie te halen. Geen makkelijke klus voor een leek als ik.

Ook had ik graag de naam van het bestand uit een veld gehaald. Kan dat?

voorbeeld:

Code:
<html>
<head>
<script language="javascript">
function WriteToFile()
{
  try
  {   
    var s = myObject.CreateTextFile("[B][COLOR="Red"][hier waarde van bestand][/COLOR][/B].txt", true);
    s.WriteLine('Hello');
    s.Close();
    alert("Opslaan gelukt!");
  }
  catch (e)
  {
    alert("Opslaan mislukt!");
      }
}
</script>
</head>
<body>
<form>
  <p>naam van bestand: <input type="text" name="[COLOR="red"]bestand[/COLOR]" size="20"></p>
  <p><input type="button" value="Knop" name="button" onclick="WriteToFile();"></p>
</form>
</body>
</html>
 
Tuurlijk. Je moet de input een id geven (inpFile hieronder) en vervolgens kun je met document.getElementById("inpFile") een referentie naar de input krijgen. De value property bevat dan de waarde van het veld :)

Het kan ook met de name property maar dat is minder direct.

Code:
<html>
<head>
<script language="javascript">
function WriteToFile()
{
  try
  {
    [b][COLOR="Red"]var inpFile = focument.getElementById("inpFile");[/COLOR][/b]
    var s = myObject.CreateTextFile([b][COLOR="Red"]inpFile.value+".txt"[/COLOR][/b], true);
    s.WriteLine('Hello');
    s.Close();
    alert("Opslaan gelukt!");
  }
  catch (e)
  {
    alert("Opslaan mislukt!");
      }
}
</script>
</head>
<body>
<form>
  <p>naam van bestand: <input [b][COLOR="Red"]id="inpFile"[/COLOR][/b] type="text" name="bestand" size="20"></p>
  <p><input type="button" value="Knop" name="button" onclick="WriteToFile();"></p>
</form>
</body>
</html>
 
Laatst bewerkt:
Bedankt voor de snelle reactie maar lijkt niet te werken. Dacht dat het aan een schrijffoutje lag (focument ipv. document) maar dat blijkt het ook niet te zijn. :(
 
oh natuurlijk, focument is iid fout gespeld, maar ik ben vergeten er C:\ voor te zetten

Het moet dus dit zijn:
Code:
    var s = myObject.CreateTextFile("C:\\"+inpFile.value+".txt", true);


en hiermee geeft de foutmelding betere informatie. Die vertel dat myObject niet gedefinieerd is.

Code:
  catch (e)
  {
    alert(e.message);
  }

er moet dus ook nog bij
Code:
    var myObject = new ActiveXObject("Scripting.FileSystemObject");



Nog even in totaal:
Code:
function WriteToFile()
{
  try
  {
    var inpFile = document.getElementById("inpFile");
    var naam = "C:\\"+inpFile.value+".txt";
    var myObject = new ActiveXObject("Scripting.FileSystemObject");
    var s = myObject.CreateTextFile(naam, true);
    s.WriteLine('Hello');
    s.Close();
    alert("Opslaan gelukt!");
  }
  catch (e)
  {
    alert("Opslaan mislukt.\n"+e.message);
  }
}
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan