Я не знаю, какова ситуация на хосте сценариев Windows, но некоторые клиенты JS имеют 32-битное int, поэтому ваш var n = parseInt(thePersistentId);
вдвойне хлопотен. При использовании parseInt вы всегда должны включать базу (например, parseInt(hexValue, 16)
, parseInt(octValue, 8)
).
Чтобы избежать ограничений 32-битного интерпретатора сценариев, вы можете отдельно извлечь младшие 32 бита и верхние 32 бита. Каждая шестнадцатеричная цифра составляет 4 бита, поэтому нижние 32 бита - это последние 8 символов вашего постоянного идентификатора, а верхние 32 бита - оставшиеся 8 (если у него нет префикса 0x
, то это следующий самый правый блок из 8 символов). ).
var hexId = "XXXXX";
var iTunes = WScript.CreateObject("iTunes.Application");
//the following two statements assume you have a valid 64 bit hex,
//you may want to verify the length of the string
//grab and parse the last 8 characters of your string
var low = parseInt(hexId.substr(hexId.length - 8), 16);
//grab and parse the next last 8 characters of your string
var high = parseInt(hexId.substr(hexId.length - 16, 8), 16);
iTunes.LibraryPlaylist.tracks.ItemByPersistentId(high,low).play();
Edit: Из того, что я прочитал в исходном коде iTuner , похоже, что highID
на самом деле являются старшими 4 байтами, а lowID
младшими 4 байтами, а не 8 байтами (таким образом отбрасывая средние 8 байтов persistentID
...). Вот измененная попытка:
//assumes hex strings with no "0x" prefix
//grab and parse the last 4 characters of your string
var low = parseInt(hexId.substr(hexId.length - 4), 16);
//grab, pad and parse the first 4 characters of your string
var high = parseInt(hexId.substr(0, 4) + "0000", 16);