Тег объекта, добавленный innerHTML, всегда равен нулю при загрузке
Я создаю тег объекта 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
Я не получаю это исключение.
7 ответов
Исправлено с помощью setTimeout следующим образом:
setTimeout(function(){
DWTContainer = document.getElementById(DW_DWTContainerID);
alert("DWTContainer: "+DWTContainer);
DWTContainer.innerHTML = objects_string;
loadFile(editWebScan,existingDocumentPath);
}, 500);
Кажется, ошибка в вашей 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>
Пожалуйста, убедитесь, что объект готов, когда вы вызываете его методы / свойства. Вы можете проверить статус объекта, проверив значение свойства. Ниже приведен простой пример:
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()...
}
}
@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 ...
}
Это должно быть проблемой с областью действия var gform. Где это заявлено? Я не вижу этого нигде в вашем коде.
Если эта переменная создана в другом скрипте, убедитесь, что скрипт загружен ранее. Также убедитесь, что gform var создан в глобальной области видимости. Чтобы убедиться, что он находится в глобальной области видимости, вы можете прикрепить его к window
, (window.gform = value
)
Я удалил функцию загрузки файлов, так как она казалась неактуальной, синтаксис вашего кода был неправильным, я исправил его, и теперь он работает, и я мог выбрать объекты из документа... проверить это:
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 (более безопасный и быстрый), как вы видите в этом коде, и проверить консоль браузера за результаты в режиме проверки
Как предложено Рэйчел, вы можете попробовать следующее:
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();
}
}