Javascript错误:磁盘已满

Javascript错误:磁盘已满,javascript,wpf,webbrowser-control,disk,user-data,Javascript,Wpf,Webbrowser Control,Disk,User Data,关于未回答的问题: 我正在大量浏览一个使用WatiN的Oracle ADF创建的政府网站。 该网站位于WPF窗口-->WindowsFormsHost-->WebBrowser控件中 该网站通过保存和加载方法大量使用此: 浏览2-3分钟后,我在其中一个“save”调用中出现以下javascript错误: 磁盘已满,字符#,行#### 当我遇到这个错误时,WebBrowser控件将变得完全无用(不能再执行javascript命令),我的应用程序必须重新启动 我试图清除浏览器缓存,更改其位置,清除本

关于未回答的问题:

我正在大量浏览一个使用WatiN的Oracle ADF创建的政府网站。 该网站位于WPF窗口-->WindowsFormsHost-->WebBrowser控件中

该网站通过保存和加载方法大量使用此:

浏览2-3分钟后,我在其中一个“save”调用中出现以下javascript错误:

磁盘已满,字符#,行####

当我遇到这个错误时,WebBrowser控件将变得完全无用(不能再执行javascript命令),我的应用程序必须重新启动

我试图清除浏览器缓存,更改其位置,清除本地存储,但一切都无济于事

复制错误的PC已安装IE10,但通过注册表,我强制webbrowser控件中的IE8/IE9模式

有没有办法解决这个问题


关于这方面的信息非常稀少,因此任何帮助都将不胜感激。

我在linux上,因此现在无法测试这一点,但所涉及的文件没有存储在浏览器缓存中

注:从IE 10开始,这不再有效。参考下面的编辑2

或者,我想,这一条同样有效(作为一条捷径):

修改或删除那里的文件

请注意,这些文件被标记为受保护的操作系统文件,因此要在资源管理器中查看,必须更改视图以包含这些文件。如果在命令提示符中使用
cmd
,则必须包括
/a
标志,如下所示:

dir /a

编辑1: 请注意,index.dat是一个保存有关已分配大小等信息的文件,因此(可能)仅删除/移动xml文件没有帮助

编辑2: 嗯。在运行IE 10的Windows 7中查看了这一点

在IE 7(在XP上)中,上述路径有一个
index.dat
文件,该文件在保存时由
userData
更新。该文件包含各种信息,例如索引文件的大小、子文件夹的数量、所有文件的大小。然后,每个文件的一个条目都有一个编号,标识文件夹、保存它的url、xml文件名、日期等。为此编写了一个简单的VBScript解析器,但由于IE 10不使用
index.dat
文件,这是一种浪费

在IE 10下,不再有各种
index.dat
文件,而是以下位置的中央数据库文件:

%APPDATA%\Local\Microsoft\Windows\WebCache\
在我的系统上,数据库文件名为
WebCacheV01.dat
,系统之间的
V
部分似乎有所不同,可能是内部版本号,而不是文件类型版本

这些文件被紧紧地锁定,因此,如果你想戳它们,一个解决方案是使用诸如等工具制作一个文件

无论如何,黑客
WebCacheVxx.dat
需要做更多的工作,所以我没有尝试过(至少现在)

但是,请注册文件获得一个带有旧位置路径的条目–例如,在写入
someElement.save(“someStorageName”)时
WebCacheVxx.dat
获取如下条目:

...\AppData\Roaming\Microsoft\Internet Explorer\UserData\DDFFGGHH\someStorageName[1].xml
并在上述路径中创建相应的文件

但是,本地
容器.dat
不会更新


用户数据 至于手头的问题,清除
localStorage
不会有帮助,因为
userData
不是该API的一部分

找不到关于如何清除
userData
的好例子。不过,一种方法是使用控制台

测试的示例:

  • 保存一些文本
  • 点击F12并输入以下内容以清除数据:

    /* ud as an acronym for userData */
    var i, at,
        ud_name = "oXMLBranch",
        ud_id   = "oPersistText",
        ud      = document.getElementById(ud_id); 
    
    /* To modify the storage one have to ensure it is loaded. */
    ud.load(ud_name); 
    
    /* After load, ud should have a xmlDocument where first child should hold 
     * the attributes for the storage. Attributes as in named entries. 
     *
     * Example: ud.setAttribute("someText", "Some text");
     *          ud.save(ud_name);
     *
     *          XML-document now has attribute "someText" with value "Some text".
     */
    at = ud.xmlDocument.firstChild.attributes;
    
    /* Loop attributes and remove each one from userData. */
    for (i = 0; i < at.length; ++i) 
        ud.removeAttribute(at[i].nodeName); 
    
    /* Finally update the file by saving the storage. */
    ud.save(ud_name);
    
    因此,通过这种方式,用户应该能够通过知道存储的名称(该名称应与文件名相同)(不包括
    [1].xml
    )或查看页面源代码来清除用户数据


    更多问题 在上面提到的页面上进行测试时,我发现
    磁盘已满
    限制为65506字节

    您的问题可能不是磁盘已满,而是在输入数据超出限制的情况下进行了写入尝试。您可以尝试清除上面提到的数据,看看它是否继续,否则您需要清除即将写入的数据

    然后,这很可能会破坏所讨论的应用程序

    换句话说,错误文本应该是这样的:

    NNN字节的写入超过了NNN的限制,而不是磁盘已满

    通过附加到窗口
    onerror
    进行测试,但不幸的是未找到错误源:

    var x1, x2, x3, x4 ; 
    window.onerror = function () { 
         x1 = window.event; 
         x2 = x1.fromElement; // Yield null
         x3 = x1.srcElement;  // Yield null
         x4 = x1.type; 
    }; 
    

    尾注 除非clear userData方法解决了这个问题,否则我不知道下一步该怎么做。未找到任何通过注册或其他方式增加限额的选项

    但也许它能让你走得更远一点


    可能有人能帮上忙。

    我在linux上,所以现在无法测试这一点,但相关文件未存储在浏览器缓存中

    注:从IE 10开始,这不再有效。参考下面的编辑2

    或者,我想,这一条同样有效(作为一条捷径):

    修改或删除那里的文件

    请注意,这些文件被标记为受保护的操作系统文件,因此要在资源管理器中查看,必须更改视图以包含这些文件。如果在命令提示符中使用
    cmd
    ,则必须包括
    /a
    标志,如下所示:

    dir /a
    

    编辑1: 请注意,index.dat是一个保存有关已分配大小等信息的文件,因此(可能)仅删除/移动xml文件没有帮助

    编辑2: 嗯。在运行IE 10的Windows 7中查看了这一点

    在IE 7(在XP上)中,上述路径有一个
    index.dat
    文件,该文件在保存时由
    userData
    更新。该文件包含各种信息,例如索引文件的大小、子文件夹的数量、所有文件的大小。然后,每个文件的一个条目都有一个编号,标识文件夹、保存它的url、xml文件名、日期等。为此编写了一个简单的VBScript解析器,但由于IE 10不使用
    索引。
    
    var ud_name = "oXMLBranch", ud_id = "oPersistText", i, at, ud = document.getElementById(ud_id); ud.load(ud_name); at = ud.xmlDocument.firstChild.attributes; for (i = 0; i < at.length; ++i) ud.removeAttribute(at[i].nodeName); ud.save(ud_name);
    
    var i, at,
        ud_name = "oXMLBranch", 
        ud      = document.createElement('INPUT'); 
    
    /* Needed to extend properties of input to include userData to userdata. */
    ud.style.behavior = 'url(#default#userdata)';
    
    /* Needed to not get access denied. */
    document.body.appendChild(ud); 
    
    ud.load(ud_name); 
    at = ud.xmlDocument.firstChild.attributes; 
    
    for (i = 0; i < at.length; ++i) 
        ud.removeAttribute(at[i].nodeName); 
    
    /* Save, or nothing is changed on disk. */
    ud.save(ud_name);
    
    /* Clean up the DOM tree */
    ud.parentNode.removeChild(ud);
    
    var x1, x2, x3, x4 ; 
    window.onerror = function () { 
         x1 = window.event; 
         x2 = x1.fromElement; // Yield null
         x3 = x1.srcElement;  // Yield null
         x4 = x1.type; 
    };