2

我正在创建一个 object tag onload,并在创建它之后尝试访问该对象,如下所示:

function loadFile() {



        alert("loading file");
        gform.MOJWebTwain.HTTPPort = 9080;
        gform.MOJWebTwain.IfSSL = false;
        var result = gform.MOJWebTwain.HTTPDownload('myServer', existingDocumentPath);
        alert("result: "+result);
        var errorString = gform.MOJWebTwain.ErrorString;
        var errorCode = gform.MOJWebTwain.ErrorCode;
        if (!result) {
            alert("errorString: " + errorString);
            alert("errorCode " + errorCode);
        }
        document.body.style.opacity="100";

}

window.onload = function () {
    var DW_DWTContainerID = "gform:scan_area";
    var DW_FULLCLASSID = "123456-abcdef-12345-abcdef-123456"; // fixed
    var DW_PROCLASSID = "3d25aba1-abcdef-12345-abcdef-123456";  // the one in lpk file

    var DW_VersionCode = "6,3,1,0";
    var DW_InWindowsX86;
    var objString = "";

    var DW_ObjectName="MOJWebTwain"
    var DW_Width = 400;
    var DW_Height = 400;
    var DW_CABX86Path = "DynamSoft/DynamicWebTWAIN.cab";
    var DW_CABX64Path = "DynamSoft/DynamicWebTWAINx64.cab";
    var LPK_Path = "DynamSoft/DynamicWebTwain.lpk";
    ua = (navigator.userAgent.toLowerCase());

    objString += "<object id='" + DW_ObjectName + "' "+"width='" + DW_Width +" ' "+"height='" + DW_Height+"' ";

    if (DW_InWindowsX86) objString += "codebase='" + DW_CABX86Path + "#version=" + DW_VersionCode + "' ";
    else objString += "codebase='" + DW_CABX64Path + "#version=" + DW_VersionCode + "' ";

    objString += " classid='clsid:" + DW_FULLCLASSID + "' viewastext>";

    //alert("objString: "+objString);

    objString += " <param name='_cx' value='847'/>";
    objString += " <param name='_cy' value='847'/>";
    objString += " <param name='JpgQuality' value='30'/>";
    objString += " <param name='Manufacturer' value='DynamSoft Corporation'/>";
    objString += " <param name='ProductFamily' value='Dynamic Web TWAIN'/>";
    objString += " <param name='ProductName' value='Dynamic Web TWAIN'/>";
    objString += " <param name='VersionInfo' value='Dynamic Web TWAIN 6,3,1,0'/>";
    objString += " <param name='TransferMode' value='0'/>";
    objString += " <param name='BorderStyle' value='0'/>";
    objString += " <param name='FTPUserName' value=''/>";
    objString += " <param name='FTPPassword' value=''/>";
    objString += " <param name='FTPPort' value='21'/>";
    objString += " <param name='HTTPUserName' value=''/>";
    objString += " <param name='HTTPPassword' value=''/>";
    objString += " <param name='HTTPPort' value='9080' />";
    objString += " <param name='ProxyServer' value=''/>";
    objString += " <param name='IfDisableSourceAfterAcquire' value='0'/>";
    objString += " <param name='IfShowUI' value='0'/>";
    objString += " <param name='IfModalUI' value='-1'/>";
    objString += " <param name='IfTiffMultiPage' value='-1'/>";
    objString += " <param name='IfThrowException' value='0'/>";
    objString += " <param name='MaxImagesInBuffer' value='99'/>";
    objString += " <param name='TIFFCompressionType' value='0'/>";
    objString += " <param name='IfFitWindow' value='-1' />";
    objString += " <param name='IfSSL' value='0' />";
    objString += " </object>";

    var obj2String = "<object "
        +"classid='clsid:"+DW_PROCLASSID+"'"+">"
        +"<param name='LPKPath' value='"+LPK_Path+"'"+"/>";
        +"</object>";

    //alert("obj2String "+obj2String);

    var obj2String = "<object classid='clsid:"+DW_PROCLASSID+"'>"
        +"<param name='LPKPath' value='"+LPK_Path+"'"+"/>";
        +"</object>";

    var objects_string=obj2String +" "+objString;

    DWTContainer = document.getElementById(DW_DWTContainerID);                          
    DWTContainer.innerHTML = objects_string;

    loadFile();
}

HTML如下:

<form id="gform">
  <div id=gform:scan_area"">

   </div>
</form>

但我总是知道我创建的对象null在这一行:

gform.MOJWebTwain.HTTPPort = 9080;

如果对象是在页面中静态添加的(即不是通过onload),我不会得到这个异常。

4

7 回答 7

2

您的 HTML 部分似乎有错误,您的如下

<form id="gform">
  <div id=gform:scan_area""><!--quote error-->

   </div>
</form>

检查这个它可以给你想要的结果

<script>
    function loadFile() {
        alert("loading file");
        gform.MOJWebTwain.HTTPPort = 9080;
        gform.MOJWebTwain.IfSSL = false;
        var result = gform.MOJWebTwain.HTTPDownload('myServer', existingDocumentPath);
        alert("result: " + result);
        var errorString = gform.MOJWebTwain.ErrorString;
        var errorCode = gform.MOJWebTwain.ErrorCode;
        if (!result) {
            alert("errorString: " + errorString);
            alert("errorCode " + errorCode);
        }
        document.body.style.opacity = "100";
    }

    window.onload = function() {
        var DW_DWTContainerID = "gform:scan_area";
        var DW_FULLCLASSID = "123456-abcdef-12345-abcdef-123456"; // fixed
        var DW_PROCLASSID = "3d25aba1-abcdef-12345-abcdef-123456";  // the one in lpk file

        var DW_VersionCode = "6,3,1,0";
        var DW_InWindowsX86;
        var objString = "";

        var DW_ObjectName = "MOJWebTwain";
        var DW_Width = 400;
        var DW_Height = 400;
        var DW_CABX86Path = "DynamSoft/DynamicWebTWAIN.cab";
        var DW_CABX64Path = "DynamSoft/DynamicWebTWAINx64.cab";
        var LPK_Path = "DynamSoft/DynamicWebTwain.lpk";
        ua = (navigator.userAgent.toLowerCase());

        objString += "<object id='" + DW_ObjectName + "' " + "width='" + DW_Width + " ' " + "height='" + DW_Height + "' ";

        if (DW_InWindowsX86)
            objString += "codebase='" + DW_CABX86Path + "#version=" + DW_VersionCode + "' ";
        else
            objString += "codebase='" + DW_CABX64Path + "#version=" + DW_VersionCode + "' ";

        objString += " classid='clsid:" + DW_FULLCLASSID + "' viewastext>";

        //alert("objString: "+objString);

        objString += " <param name='_cx' value='847'/>";
        objString += " <param name='_cy' value='847'/>";
        objString += " <param name='JpgQuality' value='30'/>";
        objString += " <param name='Manufacturer' value='DynamSoft Corporation'/>";
        objString += " <param name='ProductFamily' value='Dynamic Web TWAIN'/>";
        objString += " <param name='ProductName' value='Dynamic Web TWAIN'/>";
        objString += " <param name='VersionInfo' value='Dynamic Web TWAIN 6,3,1,0'/>";
        objString += " <param name='TransferMode' value='0'/>";
        objString += " <param name='BorderStyle' value='0'/>";
        objString += " <param name='FTPUserName' value=''/>";
        objString += " <param name='FTPPassword' value=''/>";
        objString += " <param name='FTPPort' value='21'/>";
        objString += " <param name='HTTPUserName' value=''/>";
        objString += " <param name='HTTPPassword' value=''/>";
        objString += " <param name='HTTPPort' value='9080' />";
        objString += " <param name='ProxyServer' value=''/>";
        objString += " <param name='IfDisableSourceAfterAcquire' value='0'/>";
        objString += " <param name='IfShowUI' value='0'/>";
        objString += " <param name='IfModalUI' value='-1'/>";
        objString += " <param name='IfTiffMultiPage' value='-1'/>";
        objString += " <param name='IfThrowException' value='0'/>";
        objString += " <param name='MaxImagesInBuffer' value='99'/>";
        objString += " <param name='TIFFCompressionType' value='0'/>";
        objString += " <param name='IfFitWindow' value='-1' />";
        objString += " <param name='IfSSL' value='0' />";
        objString += " </object>";

        var obj2String = "<object "
                + "classid='clsid:" + DW_PROCLASSID + "'" + ">"
                + "<param name='LPKPath' value='" + LPK_Path + "'" + "/>";
        +"</object>";

        //alert("obj2String "+obj2String);

        var obj2String = "<object classid='clsid:" + DW_PROCLASSID + "'>"
                + "<param name='LPKPath' value='" + LPK_Path + "'" + "/>";
        +"</object>";

        var objects_string = obj2String + " " + objString;
        console.log(objects_string);

        DWTContainer = document.getElementById(DW_DWTContainerID);
        DWTContainer.innerHTML = objects_string;

        loadFile();
    }
</script>

<form id="gform">
  <div id="gform:scan_area">

   </div>
</form>
于 2013-06-19T08:55:19.237 回答
1

通过使用 setTimeout 修复如下:

setTimeout(function(){
        DWTContainer = document.getElementById(DW_DWTContainerID);
        alert("DWTContainer: "+DWTContainer);
        DWTContainer.innerHTML = objects_string;
        loadFile(editWebScan,existingDocumentPath);
    }, 500);
于 2013-06-19T07:39:18.673 回答
1

请确保在调用其方法/属性时对象已准备就绪。您可以通过检查属性的值来验证对象状态。下面是一个简单的示例:

window.onload = function (){
var DW_Seed;   // The seed used to detect the control.
DW_Seed = setInterval(DW_ControlDetect, 500);
}
function DW_ControlDetect() {
// If the ErrorCode is 0, it means the control is fully loaded.
if (DWObject.ErrorCode == 0) {
   // loadFile()...
}
}
于 2013-06-14T05:04:36.230 回答
0

根据 Rachel 的建议,您可以尝试以下方法:

function loadFile() {
    gform.MOJWebTwain.HTTPPort = 9080;
    gform.MOJWebTwain.IfSSL = false;
    var result = gform.MOJWebTwain.HTTPDownload('myServer', existingDocumentPath);
    alert("result: "+result);
    var errorString = gform.MOJWebTwain.ErrorString;
    var errorCode = gform.MOJWebTwain.ErrorCode;
    if (!result) {
        alert("errorString: " + errorString);
        alert("errorCode " + errorCode);
    }
    document.body.style.opacity="100";
}    

window.onload = function () {
    var DW_DWTContainerID = "gform:scan_area";
    var DW_FULLCLASSID = "123456-abcdef-12345-abcdef-123456"; // fixed
    var DW_PROCLASSID = "3d25aba1-abcdef-12345-abcdef-123456";  // the one in lpk file

    var DW_VersionCode = "6,3,1,0";
    var DW_InWindowsX86;
    var objString = "";

    var DW_ObjectName="MOJWebTwain"
    var DW_Width = 400;
    var DW_Height = 400;
    var DW_CABX86Path = "DynamSoft/DynamicWebTWAIN.cab";
    var DW_CABX64Path = "DynamSoft/DynamicWebTWAINx64.cab";
    var LPK_Path = "DynamSoft/DynamicWebTwain.lpk";
    ua = (navigator.userAgent.toLowerCase());
    if (ua.indexOf("win64") != -1 && ua.indexOf("x64") != -1)
        DW_InWindowsX86 = false;
    else
        DW_InWindowsX86 = true;
    objString += "<object id='" + DW_ObjectName + "' "+"width='" + DW_Width +" ' "+"height='" + DW_Height+"' ";

    if (DW_InWindowsX86) objString += "codebase='" + DW_CABX86Path + "#version=" + DW_VersionCode + "' ";
    else objString += "codebase='" + DW_CABX64Path + "#version=" + DW_VersionCode + "' ";

    objString += " classid='clsid:" + DW_FULLCLASSID + "' viewastext>";
    objString += " </object>"; 

    var obj2String = "<object "
        +"classid='clsid:"+DW_PROCLASSID+"'"+">"
        +"<param name='LPKPath' value='"+LPK_Path+"'"+"/>";
        +"</object>";

    var objects_string=obj2String +" "+objString;

    DWTContainer = document.getElementById(DW_DWTContainerID);                          
    DWTContainer.innerHTML = objects_string;
    DW_Seed;   // The seed used to detect the control.
    DW_Seed = setInterval(DW_ControlDetect, 500);

}
function DW_ControlDetect() {
    if (gform.MOJWebTwain.ErrorCode == 0) {
        loadFile();
    }
}
于 2013-06-19T01:45:48.447 回答
0

这一定是 var gform 范围的问题。它在哪里声明?我在您的代码中的任何地方都没有看到。

如果该 var 是在不同的脚本中创建的,请确保该脚本之前已加载。还要确保在全局范围内创建 gform var。为了确保它在全局范围内,您可以将其附加到window, ( window.gform = value)

于 2013-06-12T11:22:23.263 回答
0

@Mahmoud 试试下面的代码,我无法用 Jsfiddle 检查你的代码(有没有办法提供凭据来访问你的服务器?测试?

function loadFile() {
    alert("loading file");
    gform.MOJWebTwain.HTTPPort = 9080;
    gform.MOJWebTwain.IfSSL = false;
    var result = gform.MOJWebTwain.HTTPDownload('myServer', existingDocumentPath);
    alert("result: "+result);
    var errorString = gform.MOJWebTwain.ErrorString;
    var errorCode = gform.MOJWebTwain.ErrorCode;
    if (!result) {
        alert("errorString: " + errorString);
        alert("errorCode " + errorCode);
    }
    document.body.style.opacity="100";

}

window.onload = function () {
var DW_DWTContainerID = "gform:scan_area";
var DW_FULLCLASSID = "123456-abcdef-12345-abcdef-123456"; // fixed
var DW_PROCLASSID = "3d25aba1-abcdef-12345-abcdef-123456";  // the one in lpk file

var DW_VersionCode = "6,3,1,0";
var DW_InWindowsX86;
var objString = "";

var DW_ObjectName="MOJWebTwain"
var DW_Width = 400;
var DW_Height = 400;
var DW_CABX86Path = "DynamSoft/DynamicWebTWAIN.cab";
var DW_CABX64Path = "DynamSoft/DynamicWebTWAINx64.cab";
var LPK_Path = "DynamSoft/DynamicWebTwain.lpk";
ua = (navigator.userAgent.toLowerCase());

objString += "<object id='" + DW_ObjectName + "' "+"width='" + DW_Width +" ' "+"height='" + DW_Height+"' ";

if (DW_InWindowsX86) objString += "codebase='" + DW_CABX86Path + "#version=" + DW_VersionCode + "' ";
else objString += "codebase='" + DW_CABX64Path + "#version=" + DW_VersionCode + "' ";

objString += " classid='clsid:" + DW_FULLCLASSID + "' viewastext>";

//alert("objString: "+objString);

objString += " <param name='_cx' value='847'/>";
objString += " <param name='_cy' value='847'/>";
objString += " <param name='JpgQuality' value='30'/>";
objString += " <param name='Manufacturer' value='DynamSoft Corporation'/>";
objString += " <param name='ProductFamily' value='Dynamic Web TWAIN'/>";
objString += " <param name='ProductName' value='Dynamic Web TWAIN'/>";
objString += " <param name='VersionInfo' value='Dynamic Web TWAIN 6,3,1,0'/>";
objString += " <param name='TransferMode' value='0'/>";
objString += " <param name='BorderStyle' value='0'/>";
objString += " <param name='FTPUserName' value=''/>";
objString += " <param name='FTPPassword' value=''/>";
objString += " <param name='FTPPort' value='21'/>";
objString += " <param name='HTTPUserName' value=''/>";
objString += " <param name='HTTPPassword' value=''/>";
objString += " <param name='HTTPPort' value='9080' />";
objString += " <param name='ProxyServer' value=''/>";
objString += " <param name='IfDisableSourceAfterAcquire' value='0'/>";
objString += " <param name='IfShowUI' value='0'/>";
objString += " <param name='IfModalUI' value='-1'/>";
objString += " <param name='IfTiffMultiPage' value='-1'/>";
objString += " <param name='IfThrowException' value='0'/>";
objString += " <param name='MaxImagesInBuffer' value='99'/>";
objString += " <param name='TIFFCompressionType' value='0'/>";
objString += " <param name='IfFitWindow' value='-1' />";
objString += " <param name='IfSSL' value='0' />";
objString += " </object>";

var obj2String = "<object "
    +"classid='clsid:"+DW_PROCLASSID+"'"+">"
    +"<param name='LPKPath' value='"+LPK_Path+"'"+"/>";
    +"</object>";

//alert("obj2String "+obj2String);

var obj2String = "<object classid='clsid:"+DW_PROCLASSID+"'>"
    +"<param name='LPKPath' value='"+LPK_Path+"'"+"/>";
    +"</object>";

var objects_string=obj2String +" "+objString;

DWTContainer = document.getElementById(DW_DWTContainerID);                          
DWTContainer.innerHTML = objects_string;

setInterval(function(){loadFile()},1000); // this will delay it by a second just in case some other instructions should be done ...
} 
于 2013-06-18T15:25:02.657 回答
0

我删除了文件加载功能,因为它似乎无关紧要,您的代码语法不正确,我更正了它,现在它正在工作,我可以从文档中选择对象..检查一下:

window.onload = function(){

    var DW_DWTContainerID = "gform:scan_area";
    var DW_FULLCLASSID = "123456-abcdef-12345-abcdef-123456"; // fixed
    var DW_PROCLASSID = "3d25aba1-abcdef-12345-abcdef-123456";  // the one in lpk file

    var DW_VersionCode = "6,3,1,0";
    var DW_InWindowsX86;
    var objString = "";

    var DW_ObjectName="MOJWebTwain";
    var DW_Width = 400;
    var DW_Height = 400;
    var DW_CABX86Path = "DynamSoft/DynamicWebTWAIN.cab";
    var DW_CABX64Path = "DynamSoft/DynamicWebTWAINx64.cab";
    var LPK_Path = "DynamSoft/DynamicWebTwain.lpk";
    ua = (navigator.userAgent.toLowerCase());

    objString += "<object id='" + DW_ObjectName + "' "+"width='" + DW_Width +" ' "+"height='" + DW_Height+"' ";

    if (DW_InWindowsX86) objString += "codebase='" + DW_CABX86Path + "#version=" + DW_VersionCode + "' ";
    else objString += "codebase='" + DW_CABX64Path + "#version=" + DW_VersionCode + "' ";

    objString += " classid='clsid:" + DW_FULLCLASSID + "' viewastext>";

    //alert("objString: "+objString);

    objString += " <param name='_cx' value='847'/>";
    objString += " <param name='_cy' value='847'/>";
    objString += " <param name='JpgQuality' value='30'/>";
    objString += " <param name='Manufacturer' value='DynamSoft Corporation'/>";
    objString += " <param name='ProductFamily' value='Dynamic Web TWAIN'/>";
    objString += " <param name='ProductName' value='Dynamic Web TWAIN'/>";
    objString += " <param name='VersionInfo' value='Dynamic Web TWAIN 6,3,1,0'/>";
    objString += " <param name='TransferMode' value='0'/>";
    objString += " <param name='BorderStyle' value='0'/>";
    objString += " <param name='FTPUserName' value=''/>";
    objString += " <param name='FTPPassword' value=''/>";
    objString += " <param name='FTPPort' value='21'/>";
    objString += " <param name='HTTPUserName' value=''/>";
    objString += " <param name='HTTPPassword' value=''/>";
    objString += " <param name='HTTPPort' value='9080' />";
    objString += " <param name='ProxyServer' value=''/>";
    objString += " <param name='IfDisableSourceAfterAcquire' value='0'/>";
    objString += " <param name='IfShowUI' value='0'/>";
    objString += " <param name='IfModalUI' value='-1'/>";
    objString += " <param name='IfTiffMultiPage' value='-1'/>";
    objString += " <param name='IfThrowException' value='0'/>";
    objString += " <param name='MaxImagesInBuffer' value='99'/>";
    objString += " <param name='TIFFCompressionType' value='0'/>";
    objString += " <param name='IfFitWindow' value='-1' />";
    objString += " <param name='IfSSL' value='0' />";
    objString += " </object>";

    var obj2String = "<object classid='clsid:"+DW_PROCLASSID+"'>"+"<param name='LPKPath' value='"+LPK_Path+"'"+"/>"+"</object>";

    //alert("obj2String "+obj2String);

    /* var obj2String = "<object classid='clsid:"+DW_PROCLASSID+"'>"+"<param name='LPKPath' value='"+LPK_Path+"'"+"/>";
        +"</object>"; */

    var objects_string=obj2String +" "+objString;

    var DWTContainer = document.getElementById(DW_DWTContainerID);                          
    DWTContainer.innerHTML = objects_string;
    console.log(document.getElementsByName('FTPPassword')[0]);
    //loadFile();
};

演示

关于 gform 对象,您还没有将任何对象分配给该变量!所以是的,它将为空或未声明。

注意:我不禁注意到您正在使用警报进行测试,这会在您循环运行时让您头疼,更好地使用 console.log (更安全,更快),如您在此代码中看到的,并检查浏览器的控制台检查模式下的结果

于 2013-06-18T01:48:29.037 回答