我正在编写一个 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/