• ベストアンサー

ActiveXを使用したブックマークレットの動作

javascript:txt=document.selection.createRange();b=txt.text.replace(/\n/g,' ');fso=new ActiveXObject("Scripting.FileSystemObject");newFile=fso.OpenTextFile("c:\\test.txt",8,true);newFile.WriteLine(b);newFile.Close(); という、選択範囲をc:\test.txtファイルに追加書き込みするブックマークレットを組んでみたのですが、上手く行ったり、ページエラーが出て書きこめてなかったり動作が不安定です。安定して動作させるにはどこを直せばよいでしょうか? OSはwindows 98SE, IE6を使用しています。ブラウザのセキュリティはActiveX関連の物は全て有効かダイアログ表示に設定しています。

質問者が選んだベストアンサー

  • ベストアンサー
noname#35109
noname#35109
回答No.2

OpenTextFile("c:\\test.txt",8,true); の \ を1つ取って OpenTextFile("c:\test.txt",8,true); にしても不安定でしょうか。 Bookmarklet ではありませんでしたが, 以前,JavaScript で IE の窓の位置や大きさを保存するときに, 普通に \\ としていて,問題なかったのですが, 他の PC(Windows98)で \\ ではうまく行かず,\ にしたらうまく行ったことがありました。 現在,Windws98 で実験することができないので,何とも言えませんが, 今やってみると,WindowsXP + IE6 では, \\ でなく,\ でもうまく動作しました。

methinks
質問者

お礼

しばらく見ていませんで、お礼遅れてすみません。問題はスクリプトではなくウィルス対策ソフトにあったみたいです。迂回策を考えて自己解決しました。ご返答どうもありがとうございました。

その他の回答 (1)

  • Blaise
  • ベストアンサー率33% (13/39)
回答No.1

うーん。ちょっと見これでよさげだけどなあ。OSとブラウザ間の 問題はないの?(ふつー、win98とIE6は最悪の純正ペアだし)

methinks
質問者

補足

一応windows updateでパッチは最新の物をあててるので、問題自体はないと思います。 エラーの発生は、どうも読み込む文章の長さに関係しているようです。文章が短い場合はステータスバーに「ページでエラーが発生」と表示されていても、書き込み自体には成功していることが多いです。(一度「ページでエラーが発生」が出ると、ブラウザを新しく立ち上げない限り何度やってもダメになる。) あと読み込む文章が日本語の場合は、長文でもエラーも出ないし、ファイルへの書きこみも成功するようです。英語の場合は5ワード前後ならエラーが出ても書きこみにはまず成功しますが、ちょっと長めになると書き込みにも失敗していることが多いです。(たまにファイルがロックされて読み取り専用でしか開けないこともあり)

関連するQ&A

  • ブックマークレットが動かない。

    現在、サイトの利用補助ツールとして、ブックマークレットを作成したのですが。なぜか、途中から動かなくなってしまいます。URLを取得し、それに対して加工後、テキストを保存する動作をします。 固定のURLを入れてHTMLで動かすとうまくいきます。 ブックマークレットでは、url = location.href;として現在見ているページを取得しています。 動作しなくなるあたりのソース。 ↓ alert("ファイルを新しく作成1" ); // ★表示されます var fso=new ActiveXObject("Scripting.FileSystemObject"); alert("ファイルを新しく作成2"); // ★以下から表示されません。

  • 「終了していない文字列型の定数です」とでます

    javascriptの以下のコードで「終了していない文字列型の定数です」と出ます。 var fso = new ActiveXObject("Scripting.FileSystemObject"); var file = fso.OpenTextFile("test.txt", 2, true); try { file.WriteLine("ここからレイアウト"); }finally{ file.Close(); } file.WriteLine()の文字が"ここからレイアウト"の時「終了していない文字列型の定数です」のエラーが出ます。ファイル名は「test.js」です。この文字列を出力する方法を教えて下さい。 よろしくお願いします。

  • ファイル内容書き換えでエラーが発生

    webサーバのosがWin2000IISで正常に動作しているASPがあるのですが、このほど、webサーバをXPで構築したところ、エラーとなります。Win2000とXPの違いなのか、わからないのですが、私がWin2000のころに設定したことをし忘れているためXPでエラーになっているのかもわかりません。下記記述でエラーとなります。(当然、c:\wwwcnt\cnt_mem.txtは存在します) Microsoft VBScript 実行時エラー (0x800A0046) 書き込みできません。 po001.asp, line 7 よろしくお願いいたします。 <% set fso = server.createobject("scripting.filesystemobject") set tso = fso.opentextfile("c:\wwwcnt\cnt_mem.txt",1,false) c_mem = tso.readline c_mem = c_mem + 1 tso.close set tso = fso.opentextfile("c:\wwwcnt\cnt_mem.txt",2,true) tso.writeline c_mem tso.close %>

  • VB6でFileSystemObjectで読込

    Visual BasicV6でFileSystemObjectを(もし必要ならTextStream オブジェクトも)使って、テキストファイルを変数に読み込む実例を作っていただけませんでしょうか。 UTF-8コードのテキストファイルを読み込みたいのですが、当方、VB.NETは使えないし、MS社などのFileSystemObjectの使い方についての下記説明を見ても、どこで変数に入っていることが分からないため、お願いいたします。 Dim fso, MyFile Set fso = CreateObject("Scripting.FileSystemObject") Set MyFile = fso.CreateTextFile("c:\testfile.txt", True) MyFile.WriteLine("This is a test.") MyFile.Close Visual BasicV6自体は十分使えますが、FileSystemObjectなどについては全く分かりません。よろしくお願いいたします。

  • VB6でUTF-8ファイルの読取りを

    VB6で、日本語と簡体文字の混在するUTF-8コードのファイル "c:\testfile.txt" を読み取って変数に入れて、取り扱える実例を作っていただけませんでしょうか? VB6では、FileSystemObjectなどを使うようですが、さっぱり使い方が分りません。私は昔、コボルやフォートランをかじったことがあり、VBの基礎は使えるのですが、FileSystemObjectなどはどうも分りません。Visual Basic.NETを使えばUTF-8も簡単に使えるようですが、難しくて歯が立たずVB6でやろうとしています。 ご参考;「次のコードは、FileSystemObject を使って、ファイルの読み取りまたは書き込みに使用できる TextStream オブジェクトを取得する例です。」とあるのですが、ファイルから変数に読み取るために使うには如何使えば良いのか、分りません。 Dim fso, MyFile Set fso = CreateObject("Scripting.FileSystemObject") Set MyFile = fso.CreateTextFile("c:\testfile.txt", True) MyFile.WriteLine("This is a test.") MyFile.Close また、下記は「指定したファイルを開き、開いたファイルの読み取り、または追加書き込みに使用できる TextStream オブジェクトを返します。」とあるのですが、これとの関係もよくわかりません。 object.OpenTextFile(filename[, iomode[, create[, format]]]) よろしくお願いいたします。

  • ファイルの変換で文字化けを回避したい

    ファイル中の文字列を一部書き換える処理をしています。regEx.replaceを使って書き換えたところ、日本語が下記のように文字化けしてしまいます。 これを回避するためにどうしたら良いでしょうか? ○変換前:test1.txt <description>東京都</description> ○変換結果:test2.txt(文字化け) <description>譚ア莠ャ驛ス</description> ○スクリプト Set fso = CreateObject("Scripting.FileSystemObject") Set inFile = fso.OpenTextFile("c:\test1.txt") Set outFile = fso.CreateTextFile("c:\test2.txt") Set regEx = New RegExp regEx.pattern = "テスト" repStr = "てすと" Do Until inFile.AtEndOfStream tempLine = inFile.ReadLine repLine = regEx.Replace(tempLine, repStr) outFile.WriteLine repLine Loop inFile.Close outFile.Close

  • 改行を含んだ文字列を正規表現で置換するには?

    正規表現で、改行を含んだ文字列を置換しようと思っています。 例えば下の「infile.txt」にある aaa bbb という(2行にわたる)文字列を zzz という文字列に変換させたい訳です。 試しに「test.vbs」のようなコードを書いてみましたが、これでは上手く行きませんでした。 上手く変換されるようにするには、どうしたら良いでしょうか? ----------------------------------------------------- ○「test.vbs」の内容 Set fso = CreateObject("Scripting.FileSystemObject") Set inFile = fso.OpenTextFile("C:\infile.txt") Set outFile = fso.CreateTextFile("C:\outfile.txt") Set regEx = New RegExp regEx.pattern = "aaa\nbbb" repStr = "zzz" Do Until inFile.AtEndOfStream tempLine = inFile.ReadLine repLine = regEx.Replace(tempLine, repStr) outFile.WriteLine repLine Loop inFile.Close outFile.Close ----------------------------------------------------- ○「C:\infile.txt」の内容 aaa bbb ccc

  • ファイルシステムオブジェクトのメソッドについて

    こんにちは、皆さん。 以下のプログラムでコピーしようとしたら、 オブジェクトがメソッド、プロパティをサポートしてないという メッセージが表示されてしまいました。 Set fso = CreateObject("Scripting.FileSystemObject") fso.CopyFile "c:\aaa.txt", "c:\temp\" Set fso = CreateObject("Scripting.FileSystemObject") Set src = fso.GetFile("c:\aaa.txt") fso.Copy "c:\temp\" こういった場合、どんなメソッドがあるか確認するには どうしたらよいでしょうか? また、ファイルをコピーするにはどうしたらよいでしょうか? よろしくお願いします。

  • 【VBScript】ディレクトリ内のファイルを、リストを読み込んで分割

    【VBScript】ディレクトリ内のファイルを、リストを読み込んで分割 ■プログラム及びファイルに関する備考 .\test\     = 分割を行いたいファイルが格納されたディレクトリ Dir_FileList.txt = testディレクトリ内のファイルをリスト化したもの。           相対パスにて、1行ずつ改行して記述する。 ■やりたい事 Dir_FileList.txtという、.\test\内に配置されたファイルをリスト化したtxtを 1行ずつ読み込み、読みこんだファイルに対し、10行毎に分割処理を行いたいと思っています。 分割したファイルは、分割元のファイルが格納されたディレクトリと同じ、.\test\ディレクトリに作成し、 分割前の元ファイルを最後に削除するという処理をリストに書かれた全てのファイルに対して行いたいです。 下記のようにコーディングをしたのですが、 どうも「Do Until ( fILE1.AtEndOfStream )」のループ文の処理が行われていない?ようで、 testディレクトリ内部のファイルが分割されません。 色々試したのですが、VBScriptを触るのは初めてでなかなか上手くいきませんでした。 どこが間違っていて、どのように修正すれば動くようになるでしょうか? お手数ですが、ご教授をお願い致します。 ---------------------------------------- Option Explicit Dim flReadFSO, flReadFSO2, fFolder, fILE, flrSubFolder Set flReadFSO = CreateObject("Scripting.FileSystemObject") Set flReadFSO2 = WScript.CreateObject("Scripting.FileSystemObject") Set fFolder = flReadFSO2.GetFolder(".") Dim name1, fILE1 name1 = fFolder & "\Dir_FileList.txt" Set fILE1 = flReadFSO.OpenTextFile(name1) Dim oneLineTxt oneLineTxt ="" Dim FSO set FSO = WScript.CreateObject("Scripting.FileSystemObject") Do Until ( fILE1.AtEndOfStream ) oneLineTxt = fILE1.ReadLine WScript.Echo oneLineTxt arg = ".\test\test01.txt" set fin = FSO.OpenTextFile(arg, 1) fbn = FSO.GetBaseName(arg) fen = FSO.GetExtensionName(arg) nf=0 set fout = FSO.OpenTextFile(".\test\" & fbn & "_" & nf & "." & fen, 2, true) nl=0 Do While Not fin.AtEndOfStream fout.WriteLine fin.ReadLine nl=nl+1 if nl>9 then fout.Close nf=nf+1 if nf>9 then exit do set fout = FSO.OpenTextFile(".\test\" & fbn & "_" & nf & "." & fen, 2, true) nl=0 end if Loop fin.Close FSO.DeleteFile arg, True Loop fILE1.Close ----------------------------------------

  • エクセルマクロ(vba)のFSO.OpenTextFileを利用したファイルへの追記について

    FSOを利用して、特定のファイルがなければ、FSO.CreateTextFileを使ってファイルを作成して、ログを記入します。 特定のファイルがあれば、FSO.OpenTextFileを使って追記します。 ファイルが存在しないので新規でファイル作成を行ってからログを記入するのははうまくいくのですが、ファイルが存在するので、ファイルを開いて追記する場合ががうまくできません。 何が原因なのでしょうか? 以下がそのプログラムです。 アドバイスをよろしくお願いします。 Dim excel_folder excel_folder = ThisWorkbook.Path excel_folder = excel_folder & "\log.txt" Set objShell = CreateObject("Wscript.Shell") Dim FSO Set FSO = CreateObject("Scripting.FileSystemObject") Dim stream, data_text If FSO.fileexists(excel_folder) Then Set stream = FSO.OpenTextFile(Filename:=excel_folder, IOMode:=ForAppending, Create:=True) Else: Set stream = FSO.CreateTextFile(Filename:=excel_folder, Overwrite:=True) End If data_text = "test" stream.writeLine (data_text) stream.writeLine (vbCrLf) stream.Close