Как далеко я могу пойти с JavaScript? - PullRequest
8 голосов
/ 23 февраля 2010

Мне нужно сделать как можно больше на стороне клиента. Более подробно, я хотел бы использовать JavaScript для кодирования интерфейса (который отображает информацию для пользователя и который принимает и обрабатывает ответ от пользователя). Я хотел бы использовать веб-сервис только для того, чтобы взять оттуда файл даты и затем отправить обратно измененный файл данных. В связи с этим я хотел бы знать, возможно ли в JavaScript следующее:

  1. Может ли JavaScript читать содержимое внешней веб-страницы? Другими словами, на моем локальном компьютере я запускаю JavaScript, который читает содержимое данной веб-страницы.

  2. Может ли JavaScript обрабатывать значения, заполненные в форме HTML? Другими словами, я использую HTML и JavaScript для создания HTML-формы. Пользователь должен заполнить форму и нажать кнопку «Отправить». Затем данные должны быть отправлены в исходный файл HTML (не на веб-сервер). Затем эти данные должны быть обработаны с помощью JavaScript.

  3. В самом конце JavaScript сгенерирует локальный файл данных, и я хочу отправить этот файл на веб-сервер PHP. Могу ли я сделать это с помощью JavaScript?

  4. Могу ли я инициировать выполнение локальной программы из JavaScript. Точнее говоря, локальная программа написана на Python.

Буду благодарен за любые комментарии и ответы.

Ответы [ 5 ]

9 голосов
/ 23 февраля 2010
  1. Это может быть технически, но на самом деле не может быть из-за той же политики происхождения . Это относится как к чтению, так и к написанию внешнего контента. Лучшее, что вы можете сделать, это загрузить iframe со страницей другого домена, но вы не можете получить к ней доступ программно. Вы можете обойти это в IE, см. Ответ Энди Е.

  2. Да для первой части, мммм на самом деле не для второй части - вы можете отправить форму на HTML-страницу и прочитать аргументы GET, используя Javascript, но она очень ограничена (рекомендуемый максимальный размер данных около 1024 байт). Вероятно, вы должны иметь весь интеллект на одной странице.

  3. Вы можете создать файл локально для загрузки пользователем, используя Downloadify . Создание файла и загрузка его на сервер невозможна без взаимодействия с пользователем. Генерация данных и отправка их на сервер в виде данных POST должна быть возможной.

  4. Это очень, очень сложно. Из-за ограничений безопасности в большинстве браузеров это, в основном, невозможно без установки расширения или подобного. Лучшим вариантом может быть использование проприетарных языков сценариев Internet Explorer (WScript, VBScript) в сочетании с моделью «зон безопасности», но я сомневаюсь, что выполнение локальных файлов возможно даже в наши дни.

2 голосов
/ 23 февраля 2010

видите, я получил то, что вы хотите сделать лучше всего делать следующее

  1. выберите библиотеку javascript (например, jquery, dojo, yui и т. Д.), Я использую jquery. Это уменьшит часть вашей нагрузки
  2. несмотря на сохранение данных форм в локальном файле, сохранение их в локальных переменных, их обработку и отправку на сервер (для дальнейшей обработки, например, добавление / обновление базы данных и т. Д.) С помощью запроса XMLHttp, а когда веб-служба возвращает данные, обрабатывают эти данные и обновить дом.

я показываю вам образец

- это дом

Name:<input type='text' id='name' />

<a href='javascript:void(0)' onClick='submit()'>Submit Form</a>
<br>
<div id='target'></div>

--this is js
function submit()
{
var _name=$('#name').val();// collect text box's data
//now validate it or do any thing you want

callWebservice(_name,_suc,_err);
//above call service fn has to be created by you where you send this data
//this function automatically do xmlHttprequest etc for you
//you have to create it ur self 
}

//call this fn when data is sucessfully returned from server
function _suc(data)
{
//webservice has returned data sucessefully 
//data= data from server, may be in this case= "Hello user Name"; (name = filled in input box);
//update this data in target div(manipulate dom with new data);
$('#target').html(data);
}
function _err()
{
//call this fn when error occurs on server
}

// на самом деле большая часть работы выполняется с использованием json. я показал вам основную идею о том, как использовать js для манипулирования доменными именами и вызова служб, а также для других вещей. таким образом мы избегаем перезагрузки страницы и новые данные видимы для просмотра

2 голосов
/ 23 февраля 2010

Используя Internet Explorer с локальным файлом, вы можете сделать кое-что из того, что вы пытаетесь сделать:

  1. Это правда, что страницы ограничены одной и той же политикой происхождения (см. Ссылку Пекки). Но в IE это можно обойти, используя COM-интерфейс WinHttpRequest .

  2. Как упоминал Пекка, лучшее, что вы можете сделать - это GET-запросы (используя window.location.search). Переменные запроса POST полностью недоступны.

  3. Вы можете использовать интерфейс COM для FileSystemObject для чтения и записи локальных текстовых файлов.

  4. Вы можете использовать метод Exec интерфейса WScript.Shell для выполнения локальной программы.

Так что практически все, о чем вы просили, достижимо, если вы хотите использовать Internet Explorer. Интерфейсы COM потребуют явного разрешения для запуска (в виде желтой панели предупреждений, которая появляется). Вы также можете посмотреть на создание гаджета для рабочего стола Windows (Vista или Win 7) или HTML-приложения (HTA) для достижения своей цели.

Если все это не удастся, превратите свой компьютер в настоящий сервер, используя XAMPP и напишите свои страницы на PHP.

1 голос
/ 23 февраля 2010

Я бы ответил, что вы многое можете сделать, но затем в комментарии к ОП вы говорите

«Я хотел бы запрограммировать групповую игру».

И так, мой ответ становится только делать на стороне клиента, что вы можете и хотите дважды проверить на стороне сервера. Никогда не доверяй клиенту !

И я не хочу делать свою работу дважды.

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

0 голосов
/ 23 февраля 2010

У нас был тот же вопрос, когда мы начинали наш проект.
В конце концов, мы перенесли все, что могли, на сторону JS. Вот наш стек:

Серверная часть получает и отправляет исключительно данные JSON.
Мы используем Erlang, но Python будет таким же. Он обрабатывает аутентификацию / безопасность и хранилище.

Интерфейс в HTML + CSS для визуальных элементов и JS для логики.
Механизм шаблонов JS преобразует JSON в HTML. Мы создали PURE , но есть множество других доступных. MVC может быть излишним на стороне браузера, но IMO, использующий механизм шаблонов, является наименьшим разделением, которое вы можете сделать.

Время отклика потрясающее. Как только страница и JS / CSS загружены (свежие или из кэша), только данные пересекают сеть для каждого запроса.

...