Тема: WSF: WSH + jQuery
Приветствую всех. Решил забрести со своей мыслью к Вам. Наверняка все знакомы с jQuery и его прелестями.
При парсинге очередного сайта задумался - а почему бы не использовать его в WSH. Первым делом проверил, что по этому поводу уже есть на просторах интернета. Обнаружил несколько ссылок:
1) https://gist.github.com/nissuk/1073781/ … d1c93b6b68
2) http://kazunori-lab.com/uchikikase/?p=1422
3) http://d.hatena.ne.jp/hasegawayosuke/20090928/p1
Материал оказался довольно полезный, но имел пару минусов:
1) Не самая новая версия jQuery - 1.3.2 / 1.6.2
2) Нерабочий (на момент проверки код). Каждый из скриптов в разных точках выдавал ошибки при выполнении кода jQuery.
Немного поковырявшись, смог собрать рабочий вариант с версией jQuery 1.10.1. Библиотека версии 1.10.2 валится с ошибкой. Пока не понял почему.
В общем собрал сэмпл загрузки погоды из интернета. Добавляю его к сообщению.
Как всегда - буду крайне рад, если кто-то посодействует:
1) в оптимизации / в улучшении / в исправлении кода
2) в обеспечении совместимости со старшими версиями jQuery
3) любыми конструктивными предложениями
UPD 06.04.2017. Пофиксил проблему с rnative.test(docElement.contains).
Удалось подключить jQuery 1.12.4
<?xml version="1.0" encoding="UTF-8"?>
<job>
<script>
<![CDATA[
/* Создание базовых элементов для jQuery */
var document = GetObject("file:","htmlfile"),
window = document.parentWindow,
location = document.location,
navigator = window.navigator;
/* Формирование хоть какого-то тела документа */
document.write('<meta http-equiv="X-UA-Compatible" content="IE=9; IE=8; IE=7; IE=EDGE"/>')
/* Обработчик событий ошибок в скрипте */
function window_onerror(errorMsg, url, lineNumber){
WScript.Echo(["errorMsg: " + errorMsg, "url: " + url, "lineNumber: " + lineNumber].join("\r\n"))
}
/* Подмена функций внутри кода */
window.ActiveXObject = ActiveXObject
/* Эмуляция остатальных функций */
function setTimeout(code,delay){return window.setTimeout(code,delay)}
function setInterval(code,delay){return window.setInterval(code,delay)}
function clearTimeout(id){window.clearTimeout(id)}
function clearInterval(id){window.clearInterval(id)}
// Фикс для ошибки rnative.test(document.documentElement.contains)
document.documentElement.contains = function(e){return document.documentElement.contains(e)}
]]>
</script>
<!-- Подгрузка JSON парсера -->
<script src="https://raw.githubusercontent.com/douglascrockford/JSON-js/master/json2.js"/>
<!-- Подгрузка jQuery библиотеки -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.js"/>
<script>
<![CDATA[
var jQuery = window.jQuery
$ = window.$
// Необходимая настройка, чтобы jQuery не думал, что это локальная страница и не пытался создавать Microsoft.XMLHTTP
$.ajaxSetup({isLocal:false})
// Необходимая настройка, чтобы jQuery выполнял кросдоменные запросы
$.support.cors = true
]]>
</script>
<!-- Подгрузка плагина jQuery для определения погоды -->
<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery.simpleWeather/3.1.0/jquery.simpleWeather.min.js"></script>
<script>
<![CDATA[
$.simpleWeather({
location: 'Moscow',
woeid: '',
unit: 'c',
success: function(weather) {
WScript.Echo(JSON.stringify(weather,"","\t"))
WScript.Echo("В москве сейчас " + weather.temp + " градусов")
},
error: function(error) {
WScript.Echo(JSON.stringify(error))
}
});
WScript.Sleep(3000)
]]>
</script>
</job>