gpt4 book ai didi

javascript - Firefox 插件 - 在提交之前捕获帖子变量 [no enctype]

转载 作者:行者123 更新时间:2023-11-30 17:03:02 25 4
gpt4 key购买 nike

我有以下表格:

<form method="post" action="includes/do.php">
<input type="text" name="action" value="login" />
<input type="text" name="email" value="myemail@hotmail.com" />
<input type="text" name="pass" value="helloworld" />
<input type="submit" value="Send" />
</form>

然后,我想在提交到 firefox addon observer 之前捕获变量值。请注意,表单没有属性:enctype="multipart/form-data"。这是一个重要的细节,因为我有一个代码可以让我获取发布数据,但它仅在 enctype="multipart/form-data" 时有效。

我确定我必须使用:

var scrStream = Cc["@mozilla.org/scriptableinputstream;1"]
.createInstance(Ci.nsIScriptableInputStream);

但到目前为止我还没有得到有效的代码(我是初学者)。

我想要这样的东西:

{
"action": "login",
"email": "myemail@hotmail.com",
"pass": "helloworld"
}

如果您了解具有以下接口(interface)的某些功能,则更好:

function get_post_data(channel) {
var data;
// ...
return data
}

谢谢!

最佳答案

假设你有一个 nsIUploadChannel channel ,你可以读取流的内容并解析它们,就像它们在 GET 参数(例如 some=value&someother=东西).

阅读

var instream = Cc["@mozilla.org/scriptableinputstream;1"].
createInstance(Ci.nsIScriptableInputStream);
instream.init(channel.uploadStream);
var data = instream.read(instream.available());

保持原始上传流不变

但是,如果您想让原始的 .uploadStream 仍然有效,则需要考虑一些事情,即您根本不能访问 nsIMultiplexInputStream 实例(这些将break),你必须检查 nsISeekableStream 并倒回流。

var ustream = channel.uploadStream;
if (ustream instanceof Ci.nsIMultiplexInputStream) {
throw new Error("multiplexed input streams are not supported!");
}
if (!(ustream instanceof Ci.nsISeekableStream)) {
throw new Error("cannot rewind upload stream; not touching");
}
var pos = ustream.tell();
var instream = Cc["@mozilla.org/scriptableinputstream;1"].
createInstance(Ci.nsIScriptableInputStream);
instream.init(ustream);
var data = instream.read(instream.available());
ustream.seek(0, pos); // restore position

如果您无论如何都将流替换为 .setUploadStream,那么这些都不是什么大问题,可以忽略。

解析

如何准确地解析 GET 样式参数取决于您并在 other answers 中讨论。已经。唯一要记住的是,通常 GET 解析器期望一个前导 ?(例如 ?some=value)、POST 数据没有那个(例如只是 some=value)。

关于javascript - Firefox 插件 - 在提交之前捕获帖子变量 [no enctype],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28516842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com