【问题标题】:How far can I go with JavaScript?JavaScript 能走多远?
【发布时间】:2011-01-20 00:42:43
【问题描述】:

我需要在客户端做尽可能多的事情。更详细地说,我想使用 JavaScript 编写一个界面(向用户显示信息并接受和处理来自用户的响应)。我想使用网络服务从那里获取一个日期文件,然后将修改后的数据文件发回。在这方面,我想知道在 JavaScript 中是否可以进行以下操作:

  1. JavaScript 可以读取外部网页的内容吗?换句话说,我在本地机器上运行 JavaScript,它读取给定网页的内容。

  2. JavaScript 可以处理 HTML 表单中的值吗?换句话说,我使用 HTML 和 JavaScript 来生成 HTML 表单。用户应该填写表格并按下“提交”按钮。然后应该将数据发送到原始 HTML 文件(而不是 Web 服务器)。那么这些数据应该由 JavaScript 处理。

  3. 最后,JavaScript 将生成一个本地数据文件,我想将此文件发送到 PHP Web 服务器。我可以用 JavaScript 做吗?

  4. 我可以从 JavaScript 启动本地程序的执行吗?更具体地说,本地程序是用 Python 编写的。

我将不胜感激任何 cmets 和答案。

【问题讨论】:

  • “我需要在客户端做尽可能多的事情”——出于兴趣,为什么?
  • Paul,我想编写一个小组游戏。我想要有两个版本的游戏(从技术角度来看)。在第一种情况下,游戏基于 P2P 方法(我使用 Python 建立计算机之间的连接)。在第二种情况下,我想使用 Web 服务器来玩游戏。而且我不想做我的工作两次。所以,我想我可以使用 JavaScript 来编写交互界面。而且我可以将此接口应用于 P2P 和 Web 服务器方法(唯一的区别是数据的获取方式,但可用数据由相同的代码显示)。
  • 第4点:配置机器注册“myap://”之类的协议或保存文件并将扩展名与程序相关联。其中任何一个都需要在运行应用程序之前配置机器。

标签: javascript ajax webforms client-side


【解决方案1】:

看到我得到了你想做的事 最好的事情是跟随

  1. 选择一个 javascript 库(例如:jquery、dojo、yui 等),我使用 jquery。这会减少一些负载
  2. 尽管将表单数据保存在本地文件中,但将它们存储在本地变量中处理它们并使用 XMLHttp 请求将它们发送到服务器(用于进一步处理,如添加/更新数据库等),当 web 服务返回数据时处理该数据和更新 dom。

我给你看一个样本

--这是dom

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 来操作 dom 和调用 servcies 以及做其他事情的基本思想。这样我们可以避免页面重新加载,并且新数据对查看器可见

【讨论】:

  • 但是网络服务器如何返回数据呢?我刚刚被告知 JavaScript 无法从 Web 服务器读取任何内容。
  • 要从服务器获取数据,您必须发出 XMLHttp 请求。这个 XMLHttp 对象有很多属性,其中一个是 url,您可以在其中指定哪个 url 将处理此数据。阅读一些关于 ajax 的在线文章,它会对您有所帮助。
【解决方案2】:

当我们开始我们的项目时,我们也有同样的问题。
最后,我们将所有可能的东西都移到了 JS 端。这是我们的堆栈:

后端专门接收和发送 JSON 数据。
我们使用 Erlang,但 Python 也一样。它处理身份验证/安全性和存储。

前端,HTML+CSS 用于视觉元素,JS 用于逻辑。
JS 模板引擎将 JSON 转换为 HTML。我们已经构建了PURE,但还有很多其他可用的。 MVC 在浏览器端可能有点过头了,但使用模板引擎的 IMO 是你能做的最少的分离。

响应时间惊人。一旦页面和 JS/CSS 被加载(新的或从缓存中),每个请求只有数据通过网络。

【讨论】:

    【解决方案3】:

    我会回答说你可以做很多事情,但是在对 OP 的评论中,你说

    “我想编写一个小组游戏。”

    因此,我的答案变成只在客户端执行您能够并愿意在服务器端仔细检查的内容。 Never Trust the Client!

    而且我不想做我的工作两次。

    如果你要在客户端做事,你必须做两次,否则会受到猖獗的作弊。

    【讨论】:

      【解决方案4】:
      1. 技术上可以,但实际上由于same origin policy 而不能。这适用于读取和写入外部内容。您可以做的最好的事情是加载一个包含不同域页面的 iframe - 但您无法以编程方式访问它。您可以在 IE 中解决此问题,请参阅 Andy E 的回答。

      2. 第一部分是,嗯,第二部分不是真的 - 您可以将表单提交到 HTML 页面并使用 Javascript 读取 GET 参数,但它非常受限(建议最大大约 1024 字节的数据大小)。您可能应该在一页上了解所有信息。

      3. 您可以在本地生成文件供用户使用Downloadify 下载。如果没有用户交互,就无法生成文件并将其上传到服务器。不过,应该可以生成数据并将其作为 POST 数据发送到服务器。

      4. 这非常非常困难。由于安全限制,在大多数浏览器中,如果不安装扩展程序或类似的东西,大多数情况下是不可能的。最好的选择可能是 Internet Explorer 的专有脚本语言(WScript、VBScript)与“安全区域”模型相结合,但我怀疑即使在现在也可以执行本地文件。

      【讨论】:

      • 1.但我不想在另一个站点上执行某些操作。我只想访问公开网页的内容。我只是阅读(不执行)。 2. 读取 GET 参数到底有什么限制?就我能得到变量的值而言,我很高兴。
      • 1.是的,仍然不可能。执行此操作的常用方法是使用代理服务器端脚本,该脚本与请求的页面在同一域上运行,并获取内容,但如果您的页面位于用户的 PC 上,即使这样也不起作用。如果我们正在讨论的这个页面位于 Web 服务器上,您可以使用代理。 2. 尺寸限制 - 最多可以安全运输1024 字节。
      • 好答案,Pekka :-) 关于 1、3 和 4,我认为 IE 是这里唯一真正的选择。
      • @Andy E 欢呼 :) 我不知道 IE 可以像你在回答中概述的那样做,干得好!
      • @Pekka:我主要处理基于 IE 引擎的 Windows 桌面小工具。我的工作几乎是找到做本地不可用的事情的方法;-)
      【解决方案5】:

      使用带有本地文件的 Internet Explorer,您可以做一些您想做的事情:

      1. 页面确实受到同源策略的限制(请参阅 Pekka 的链接)。但这可以在 IE 中使用WinHttpRequest COM 接口解决。

      2. 正如 Pekka 所提到的,您可以管理的最好方法是 GET 请求(使用 window.location.search)。 POST 请求变量是完全无法获得的。

      3. 您可以使用FileSystemObject 的COM 接口来读写本地文本文件。

      4. 可以使用WScript.Shell接口的Exec方法执行本地程序。

      因此,只要您愿意使用 Internet Explorer,您所要求的一切都可以实现。 COM 接口需要明确的权限才能运行(出现的黄色警报栏)。您还可以考虑创建 Windows Desktop Gadget(Vista 或 Win 7)或 HTML Application (HTA) 来实现您的目标。

      如果失败了,请使用XAMPP 将您的计算机变成真正的服务器,然后用 PHP 编写您的页面。

      【讨论】:

      • 但是,您可以通过使用 XUL、Prism、Weave 和许多其他工具的 Firefox 做更多的事情。 Firefox 就是为做这些事情而构建的,它们可以在任何平台上运行。
      • @Rob:引用XUL, Prism, and many other tools。只需安装 Windows,我的答案中的一切都是可能的。一点也不复杂。我们不是在谈论做far, far more,我们在谈论做他的问题中指定的操作,实际上,您可以在 IE 中使用 JavaScript 和 COM 做任何事情,我相信您可以使用Fx、XUL 等。非常欢迎您提供自己的答案来推荐这些工具 :-)
      猜你喜欢
      • 2023-03-11
      • 2010-09-05
      • 2019-12-13
      • 2013-03-06
      • 1970-01-01
      • 1970-01-01
      • 2016-07-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多