Код Javascript не принимается валидатором (JSHint)

Я написал код для отображения закладок в IE8. Чтобы проверить это, я использовал JSHint, и я получаю следующие ошибки:

  • var files = новый перечислитель (FavFolder.Files); «Перечислитель» не определен. (строка 14)
  • Перечислитель (FavFolder.SubFolders); «Перечислитель» не определен. (строка 34)
  • ActiveXObject("Scripting.FileSystemObject"); «ActiveXObject» не определен. (строки 46)
  • ActiveXObject("WScript.Shell"); «ActiveXObject» не определен. (строка 50)

Кто-нибудь знает, почему?

мой код:

var i=0;
var favString="";
var fso;



function GetFavourites(Folder)
{
var FavFolder=fso.GetFolder(Folder);
//Gets Favourite Names & URL's for given folder.
var files=new Enumerator(FavFolder.Files);
for(; !files.atEnd() ;files.moveNext())
{
var fil=files.item();
if(fil.Type=="Internet Shortcut")
{
var textReader=fso.OpenTextFile(fil.Path,1,false,-2);
var favtext=textReader.ReadAll();
var start=favtext.indexOf("URL",16);
var stop=favtext.indexOf("\n",start);
favString+=fil.Name.replace(/.url/,"");
favString+=":URL:";
//to separate favourite name & favorite URL
favString+=favtext.substring(start+4,stop-1);
favorites.innerHTML+=favString;
favString+=":NEXT:"; //to separate favorites.
i++;
}
}
//Checks any subfolder exists
var subfolders=new Enumerator(FavFolder.SubFolders);
for(; !subfolders.atEnd() ;subfolders.moveNext())
{
var folder=subfolders.item();
GetFavourites(folder.Path);
}
}

function Import()
{
try
{
fso=new ActiveXObject("Scripting.FileSystemObject");
if(fso !==null )
{
//Create windows script shell object to access Favorites folder in user system.
var object=new ActiveXObject("WScript.Shell");
var favfolderName=object.SpecialFolders("Favorites");
if(favString==="")
{
GetFavourites(favfolderName);
}
} 
}
catch(err)
{
alert("Security settings to be modified in your browser ");
}
}

person Bruno    schedule 11.05.2011    source источник
comment
Насколько я вижу, обе функции не определены в файле. Вам, вероятно, придется настроить инструмент проверки, чтобы рассматривать их как глобальные функции (т. е. они всегда доступны).   -  person Felix Kling    schedule 11.05.2011
comment
Спасибо всем за ваши отличные ответы!   -  person Bruno    schedule 11.05.2011


Ответы (5)


jslint обычно предназначен для javascript во всех браузерах, а не в IE, поэтому Enumerator и ActiveXObject или другие объекты, указанные в браузере, не поддерживаются.

Если вы разрабатываете только для IE, просто игнорируйте эти предупреждения.

Кроме того, вы можете добавить Enumerator, ActiveXObject в текстовое поле Предопределенные.

person otakustay    schedule 11.05.2011

Перечислитель и ActiveXObject — это глобальные переменные, определенные извне. Вы можете указать JSHint игнорировать их, поместив следующее в верхней части вашего JavaScript:

/*global Enumerator: false, ActiveXObject: false */
person James Wiseman    schedule 11.05.2011

Я нигде не вижу определения Enumerator, а ActiveXObject — это расширение Microsoft. (Enumerator тоже может быть, по крайней мере, в Windows Scripting Host.) JSHint сверяется со спецификацией, а не с дополнениями, специфичными для поставщика.

person T.J. Crowder    schedule 11.05.2011

Они оба специфичны для IE, может быть, парсер имеет флаг «IE»? Помимо этого, вам нужно будет как-то определить их, если вы действительно хотите, чтобы ваш код прошел.

person Jad    schedule 11.05.2011

Я не знаю, правильный ли это способ, но это работает для меня.

"predef": ["XDomainRequest","ActiveXObject"]

Я добавил это в свой .jshintrc.

person Arvind    schedule 24.02.2014