问题标签 [hosted-app]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
2959 浏览

versioning - 在构建托管/SAAS 应用程序时,如果允许客户自定义,您如何管理多个版本?

假设您正在构建一个计算器应用程序。您将允许客户使用自己的徽标和 CSS 样式表自定义此计算器。客户将他们的域指向您托管的计算器,该应用程序将为每个客户提供正确的主题。例如:

  • www.AcmeCalculator.com将提供带有 Acme 标志的计算器,以及他们创造的平淡的企业风格。
  • www.HellzCalc.com将为计算器提供一些地狱天使骑自行车的标志和他们创建的黑色、血红色主题。

你推出了 Calculator 1.0,每个人都编写了他们的样式来使用这个版本。

下个月你准备发布 Calculator 1.1,它添加了一个新特性,比如说“科学模式”,它需要你添加一些新的 UI——在这个例子中是 HTML——组件。这意味着如果你推出 1.1,你将打破你客户的一些风格。

我想出的最佳解决方案是让应用程序的多个版本保持运行。例如:

  • www.AcmeCalculator.com解析到您的应用服务器,该服务器检查 Acme 当前的版本,并转发到www.AcmeCalculator.com/1.0
  • www.HellzCalc.com解析到您的应用服务器,它注意到他们正在新的 1.1 版本上运行,因为他们进入了更新的 CSS 以在新版本上工作并单击“完成升级”按钮或其他任何东西,所以他们得到重定向到“ www.HellzCalc.com/1.1

该系统的一个问题是,您将不可避免地遇到从不投资升级的懒惰客户。您将同时运行 200 个版本,试图修复每个版本中的错误,基本上会发疯。

一种解决方案是使用您每月托管费用的一部分来雇用“UI 迁移团队”,该团队将是一组设计师,他们唯一的工作就是不断让客户排队运行最旧的版本并调整他们的 CSS 并验证他们在最新版本上运行。这将允许您同时仅支持 X 个版本,其中 X 是您在 UI 迁移团队中投入多少资金的函数,添加资源以加快或减慢它们。

同样的想法也适用于数据库更改:Calculator 1.0 和 1.1 在数据库 1.0 上运行,但 Calculator 1.2 在数据库 1.1 上运行,等等。您可以添加带有版本名称的模式,并使用类似的“数据迁移团队”来移动数据架构 1.0 到架构 1.1,最终在没有(应用)客户端时删除架构 1.0。

我敢肯定这种类型的问题以前出现过,我想看看其他人是如何解决的。也许甚至有一个“最佳实践”。

0 投票
2 回答
352 浏览

saas - 托管软件合同

我终于为我的托管软件找到了一个客户——这是我第一次销售软件。我希望双方签署一份合同,详细说明预期正常运行时间、付款时间表等,这样没有人会觉得他们被骗了,但我不是律师,现在真的买不起。有谁知道如何开始这个过程?

TIA。

0 投票
3 回答
372 浏览

web-applications - 如何设计一个托管的 Web 应用程序?

您将如何设计托管的 Web 应用程序?我正在研究 Basecamp、Campaign Monitor、Freshbooks 等应用程序,用户可以在线注册并为他们托管应用程序。

  1. 您会使用 1 个大型数据库来存储所有客户的数据,还是会以不同的方式处理数据?你会使用超过 1 个数据库吗?你会为每个客户建立一个数据库吗?
  2. 您会为每个注册/客户复制代码库,还是使用 1 个代码库来处理所有客户?
  3. 还有其他我应该考虑的设计元素吗?
  4. 有没有讨论这个的网站或书籍?

编辑:我发现了一篇讨论多租户数据架构的 MSDN 文章:http: //msdn.microsoft.com/en-us/library/aa479086.aspx#mlttntda_topic4

0 投票
2 回答
52 浏览

php - 寻求创建托管解决方案

我正处于考虑我要开发的产品的早期阶段,该产品是一个托管电子商务解决方案。在允许用户注册自己的域名时,我需要考虑哪些事情?这怎么行?我知道我可以做子域,但不知道用户自己的域如何在托管解决方案上工作?

有任何想法吗?

0 投票
2 回答
1138 浏览

licensing - 在商业托管解决方案的后端使用 GNU LGPLv3 平台

我的公司希望生产一套绘图 (CAD) 和地图解决方案 (GIS) 作为托管环境中的商业解决方案(用户可以通过网络订阅访问)。在后端,我们希望实现一个在 GNU LGPLv3 下可用的内容/文档管理平台。我们的意图是分发 LGPL 应用程序,也不向最终用户公开其用户界面(它将类似于我们解决方案的数据库使用)。也就是说,鉴于我们将向客户收取我们的解决方案的费用,这种用法是否符合许可?此外,由于我们没有修改 LGPL 平台的源代码(我们仅通过其发布的 Web 服务 API 以编程方式访问它),我们是否需要提供我们的源代码?

0 投票
1 回答
199 浏览

xss - 防止对托管 CMS 的 XSS/JS 攻击

我正在开发托管 CMS,并且正在考虑允许站点编辑器添加自定义 javascript 和 html(一个非常需要的功能)。

我担心这会打开一个攻击媒介——讨厌的 js 可能会调用我们托管的 CMS 公开的功能(有关用户脚本对 myspace 所做的示例,请参阅Samy 蠕虫),但我真的想给用户控制权在他们的网站上(你不能添加自己的聪明东西的 CMS 有什么意义?)

解决此问题的好方法是什么?我能想到几个我想评论的,但我不打算列出它们,因为害怕“没有列出问题的模组”!

0 投票
2 回答
1837 浏览

google-chrome - Google Chrome 托管应用与打包应用

我对 Chrome 托管应用程序与打包应用程序感到困惑。

托管应用程序 - 是我们在服务器端托管我们的网站的地方 - 需要互联网

打包的应用程序 - 在客户端站点中托管网站 - 就像原生应用程序一样 - 无需互联网。

我对打包应用很感兴趣,但我可以像 drive.google.com 或 gmail 一样制作打包应用吗?当他们离线时使用打包的应用程序,当他们在线并开始将待处理的离线文件同步到服务器时。或者打包的应用程序只是离线的一切?

0 投票
1 回答
210 浏览

php - 托管 PHP 应用程序的最佳实践

我用 CodeIgniter 编写了一个 PHP 应用程序。我计划将其作为托管应用程序(软件即服务)出售。

这些应用程序允许用户:

  • 创建帐户
  • 创建用户
  • 管理文件
  • 管理订单
  • 有通讯录
  • 搜索
  • 报告等。它使用一个数据库。最好的例子是新书。(反正它不是我的竞争对手。)

我的问题是:

托管应用程序的最佳配置是什么?请记住,该应用程序可以增长到数千名用户。

实际配置是:

  1. 代码 example.com/appfolder 的一个地方
  2. 用户将在 example.com 上创建帐户
  3. 在用户帐户上,每个用户都有一个使用该应用程序的链接

user1.example.com

user2.example.com

.....................

所有子域都指向同一个 example.com/appfolder

  1. example.com 有一个数据库,用于记录用户及其每月付款
  2. 该应用程序托管在 example.com/appfolder 上,并根据 url 为每个用户选择一个单独的数据库。

对于 100、200、300 个用户来说,一切看起来都很好,但如果我有 1000 或 2000 个用户,我将不得不管理和备份 1000 或 2000 个数据库(每个 3-5MB)

我知道我应该为所有用户提供一个数据库,但这将使其非常难以管理,并且用户数据库中有敏感数据。

最重要的是,用户可以创建可以使用相同应用程序的用户,但只能在管理员用户创建的子域上(在 exmaple.com 上注册)

这种配置会使拥有超过 2000 个管理员用户(这意味着 2000 db)的专用服务器崩溃吗?

Basic 与 CMS 非常相似,但更专业。

有没有更实用的方法来做这个配置?

任何建议将不胜感激。提前谢谢了。

0 投票
2 回答
134 浏览

google-chrome-app - 托管应用程序:“此项目的安装可能无法正常工作”

我的托管应用程序显示一个浮动横幅,上面显示“安装此项目可能无法正常工作”。在其 Google Chrome Web Store 产品页面上。通过搜索 Web Store无法发现该应用程序。

是什么导致了这个问题?我在开发人员仪表板中找不到其他信息。

0 投票
1 回答
1153 浏览

c++ - MFC WebBrowser Control:模拟Ctrl+N需要多少(正常)代码行?

更新:答案:需要两行正常的代码。谢谢诺塞拉蒂奥!

我在键盘上敲了几个小时,比我想在托管的浏览器控制应用程序中模拟 IE 的 Ctrl+N 行为还要多。不幸的是,由于我从下面的代码示例中抽象出来的复杂性,我不能让 IE 自己做 Ctlr+N。所以我必须手动完成。

请记住,我正在运行托管浏览器。因此,通常情况下,在新窗口中打开链接实际上会在我的应用程序中的一个新“选项卡”中打开它(它实际上不是一个选项卡,而是另一个窗口......但从外观上看,它是一个选项卡)。然而,Ctrl+N 是不同的——在这里,一个成熟的 IE 窗口会在按下时启动。

我认为我的问题在于提出问题 - 诚然,我是 WebBrowser 控件的新手,我发现它很讨厌。无论如何,过去一天我已经在 Internet 上进行了搜索,但无法提出一个优雅的解决方案。

基本上,理想的解决方案是在 WebBrowser 控件或其附属库中调用“NewWindow”函数;但是,我只能找到 * On *NewWindow 方法的位置,它们是事件处理程序,而不是事件信号器。据我所知,大多数时候,用户将创建事件......但是程序模拟呢?

我尝试研究一种 SENDMESSAGE 方法,在该方法中我可以使用 OnNewWindow 事件使用的 ID...最终导致崩溃。也许我可以回去让它工作,但我想确认这种方法甚至值得我花时间。

下一个方法应该是最优雅的,但遗憾的是没有成功,如下所示:

如果不是因为新窗口会在后台打开并在任务栏中闪烁,它会非常有效。需要单击以将其带到前面。

我试图以多种方式绕过限制,包括获取当前上下文的调度程序,然后使用该 IDispatch 对象调用 OnNewWindow2。然后,我将对 IWebBrowser 控件的调度对象调用 QueryInterface。webBrowser 控件(可能在新窗口的控制下)然后可以导航到原始上下文的页面。然而......这也是一个非常混乱的解决方案,最终会导致崩溃。

最后,我求助于手动调用 JavaScript 来获得所需的行为。真的??对于我的问题,真的没有比下面乱七八糟的代码更优雅的解决方案了吗?

我很难相信我必须求助于这样的骇客来获得像当用户按下 Ctrl+N 时打开一个新窗口这样简单的东西。

请stackoverflow,请指出我忽略的显而易见的事情。