将纯文本发送到火狐浏览器

本文关键字:火狐浏览器 文本 | 更新日期: 2023-09-27 18:37:02

关于在Firefox中查看文本,我有一个非常简单的问题。我的应用程序正在生成一些我需要在 Firefox 中查看的文本。如果我保存一个.txt文件并在 Firefox 中打开它,浏览器的一个插件能够利用文本并执行它需要做的事情。

我一直在通过创建一个临时文件,将文本写入其中,然后在 Firefox 中打开该文件来实现这一点。问题是,我需要在将该文件馈送到 Firefox 后将其删除,所以我没有数百个这样的文件。我正在使用临时文件方法,因为我找不到有关能够在浏览器的参数中传递一些直接文本的信息。

无论如何,这就是我现在得到的,你可以看到我的File.Delete实际上在 Firefox 可以访问它之前删除了该文件。如果我更慢地逐步执行代码,那就没问题了。

有什么想法吗?

try
{
   string fileName = Path.GetTempFileName();
   FileInfo fileInfo = new FileInfo(fileName);
   fileInfo.Attributes = FileAttributes.Temporary;
   string writetext = "text I need in a Firefox page";
   File.WriteAllText(fileName, writetext);
   ProcessStartInfo startInfo = new ProcessStartInfo();
   startInfo.FileName = "firefox.EXE";
   startInfo.Arguments = fileName;
   Process.Start(startInfo);
   if (File.Exists(fileName))
     {
         File.Delete(fileName);
     }
   }
   catch (SystemException ex)
   {
     MessageBox.Show("An error occured: " + ex.Message);
   }

将纯文本发送到火狐浏览器

或者

你可以改用数据URI,例如 firefox.exe "data:text/plain,Lorem ipsum dolor sit amet"

我会在用户 TEMP 文件夹中创建特定于应用程序的子文件夹并在那里存储文件。

这样做,我会假设除了我之外没有其他人会写入该文件夹。

每次运行Process.Start代码时,都需要使用过滤器"文件是在 30 多分钟前创建的"(值可以不同)从该文件夹中删除所有文件。

在最坏的情况下,该文件夹中会有一些文件,但文件数量不会增长。

这里有几种方法可以采取。 最危险的方法是只调用Thread.Sleep( 5000 ),并希望有足够的时间让 Firefox 在您删除文件之前读取文件。 但是,在一个非常慢的系统上,这可能还不够。

更好的方法是等到进程退出后再删除文件:

var p = Process.Start( startInfo );
p.WaitForExit();
if( File.Exists( fileName ) ) {
    File.Delete( fileName );
}

当然,这将阻止您的调用程序,直到 Firefox 退出。 还有另一种选择,那就是等待Exited事件:

var p = Process.Start( startInfo );
p.Exited += FirefoxExited;
// ...
void FirefoxExited( object sender, EventArgs e ) {
    if( File.Exists( fileName ) )
        File.Delete( fileName );
}