javascript - LSL HttpServer - 从 Secondlife 的 Prim 库存中提供大型记事卡

标签 javascript html linden-scripting-language

我正在编写一个 Media-HUD,它完全在存储在 prim list 中的本地记事卡文件上运行,记事卡的名称类似于 index.html、style.css、icon.svg 等。

我的希望是使用 LSL HttpServer 函数和脚本的 URL 创建一个完全独立的基于媒体的 HUD,它可以像编辑任何网页一样轻松编辑。

这本身是完全可能的,但是有一个限制,即页面必须适合分配给 LSL 脚本的内存。在单声道下,这只有 64kb。

我想通过某种方式(也许是从javascript)消除这一限制,在用户浏览器本身中逐行从记事卡中读取每个"file"(因此,通过仅将记事卡一行放入内存来绕过内存限制一次)。

有办法做到这一点吗?通过加载字符串使其逐行生成,然后在 javascript 中生成整个文件,就像它是一个完整文件一样?我不确定这是否可行。

非常感谢任何想法/指导!

最佳答案

您可以使用 XMLHttpRequest 通过 Javascript 来完成此操作。 jQuery 对此的包装器称为 Ajax 。您可以单独请求每一行,这会稍微慢一些,或者在脚本闲暇时一次读取多行。 http_request 没有受到限制,所以两者都可以工作。请注意,加载程序必须在单个响应中发送,因为 LSL 服务器无法像实际服务器那样“分段”推送数据。

注释:

  • llGetNotecardLine 仅返回每行的前 255 个字节。
  • llHTTPResponse 必须在请求后大约 20 秒内调用,因此您无法一次从记录卡中读取超过 20 行。
  • 我不确定这对于非 DOM 文件类型如何工作。所有文件都需要使用 Javascript DOM 嵌入到 HTML 中。据我所知,Javascript 无法任意创建外部文件并将其服务于自身。显然,它不适用于非文本文件类型,但您当然可以加载其余的 HTML、CSS 和 HTML5 SVG。基本上,如果它可以放入单个 HTML 文件中,您就可以通过 Javascript 加载它。

我没有 React 的经验但它提供了一个很好的例子,说明了在 UI 方面纯粹通过 Javascript 加载内容是可能的。

关于javascript - LSL HttpServer - 从 Secondlife 的 Prim 库存中提供大型记事卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48372853/

相关文章:

javascript - 节点列表 - 'undefined: not bound to any nodes'

javascript - D3.js 路径转换中这句话的确切含义是什么

linden-scripting-language - 如何在 LSL 聊天中隐藏对象的名称?

javascript - 使用 forEach Firebase Cloud Functions 时出现未处理的错误 TypeError : snapshot. val 不是函数

javascript - Jquery 幻灯片不工作

渐进式 Web 应用程序上的 Android 后退按钮关闭应用程序

html - CSS - float 下推问题,图标像布局一样显示在楼梯上

linden-scripting-language - 即使我删除了脚本,我的 LSL 粒子也不会消失。我怎样才能关闭它们?

javascript - 类型 ="image"的输入按钮在 IE 11 中无法与 href 配合使用