【发布时间】:2023-03-27 20:23:01
【问题描述】:
我为 mozilla firefox 按钮创建了一个扩展,它将音译特定的网页。 按钮代码粘贴在mozilla的%appdata%中。button.js的代码如下
function doSomething()
{
let url = "http://localhost/aaa/trial.asp";
let request = Components.classes["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance(Components.interfaces.nsIXMLHttpRequest);
request.onload = function(aEvent) {
doc=gBrowser.contentDocument;
doc.body.innerHTML = "<div>" + gBrowser.contentDocument.body.innerHTML + "</div>";
doc.body.innerHTML = "<div style='background-color: gray' >" + aEvent.target.responseText + "</div>" + gBrowser.contentDocument.body.innerHTML;
doc.body.innerHTML = gBrowser.contentDocument.body.innerHTML + "<div id='in_trans_overlay'><a id='in_trans_lnk' href='javascript:hide(0); void 0;'>click here to see the original page</a></div>" ;
doc.getElementById("in_trans_overlay").style.left="0px";
doc.getElementById("in_trans_overlay").style.top="0px";
doc.getElementById("in_trans_overlay").style.position="fixed";
doc.getElementById("in_trans_overlay").style.backgroundColor="blue";
//doc.getElementById("in_trans_overlay").style.opacity="0.4";
doc.getElementById("in_trans_overlay").style.width="100%";
doc.getElementById("in_trans_overlay").style.zIndex="10";
doc.getElementById("in_trans_lnk").style.color="white";
//doc.getElementById("in_trans_lnk").style.opacity="1.0";
doc.body.childNodes[1].style.display="none";
hd=doc.getElementsByTagName("head");
scpt=doc.createElement("script");
scpt.setAttribute("type", "text/javascript");
scpt.setAttribute("charset", "UTF-8");
scpt.setAttribute("src", "http://localhost/aaa/hide.js");
hd[0].appendChild(scpt);
};
request.onerror = function(aEvent) {
window.alert("Error Status: " + aEvent.target.status );
};
request.open("POST", url, true);
request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
params = gBrowser.contentDocument.body.innerHTML;
params = "inTransContent=" + encodeURIComponent(params);
request.setRequestHeader("Content-length", params.length);
request.setRequestHeader("Connection", "close");
request.send(params);
}
此代码发送一个 xmlhttprequest,它将执行 trial.asp 代码。
trial.asp 包含以下代码
<% Dim xmlDoc
Dim objNodeList
Dim count
set xmlDoc = Server.CreateObject("Msxml2.DOMDocument.6.0")
xmlDoc.validateOnParse = False
xmlDoc.async = False
xmlDoc.loadXML("<div>" & Request.Form("inTransContent") & "</div>")
If (xmlDoc.parseError.errorCode <> 0) Then
Dim myErr
Set myErr = xmlDoc.parseError
Response.Write("<div><br><br><br>" & myErr.reason & "<br>" & myErr.line & "<br>" & myErr.srcText & "</div>")
Else
Set objNodeList = xmlDoc.documentElement.selectNodes("//text()")
count = objNodeList.length
For i = 1 To count
objNodeList(i-1).insertData 0, "XYZ "
objNodeList(i-1).insertData objNodeList(i-1).length, " XYZ"
Next
Response.Write(xmlDoc.documentElement.xml)
End If
%>
此代码将仅发送要音译的文本节点,因为我在 for 循环中没有取得太大进展,所以我用 dummy 替换了它。它在之前和结尾附加了 xyz。我需要转换这个 asp 代码,因为我要去 asp.net。我需要将其转换为 vb.net 或 c# 代码..我稍后会回到 for 循环..此代码应成为 asp.net 中的 default.aspx 文件。
asp.net 的下一件事是我需要一个 global.asax 文件 global.asax 文件包含此代码
protected void Application_Start(object sender, EventArgs e)
{
sbyte[,] a = new sbyte[100, 100];
sbyte[,] b = new sbyte[100, 100];
int count = 0;
XDocument docA = XDocument.Load("dev.xml");
XDocument docB = XDocument.Load("guj.xml");
var devanagriKeys = (from d in docA.Descendants("mapping")
select new {
Key = d.Descendants("itrans").FirstOrDefault().Value,
Character = d.Descendants("character").FirstOrDefault().Value
}).ToArray();
var gujrathiKeys = (from g in docB.Descendants("mapping")
select new {
Key = g.Descendants("itrans").FirstOrDefault().Value,
Character = g.Descendants("character").FirstOrDefault().Value
}).ToArray();
var crossReference = (from d in devanagriKeys
join g in gujrathiKeys on d.Key equals g.Key
select new {
d.Key,
Devanagri = d.Character,
Gujrathi = g.Character
}).ToList();
此代码将从梵文脚本和古吉拉提语脚本中获取字符,并使用 itrans 作为一种媒介创建一个列表,例如 अ 在 itrans 中是一段时间 અ 在古吉拉特语中具有相同的 itrans a 因此将创建一个存储 अ 和 અ 的列表,因为它们具有相同的 itrans。
在这里,我需要将此列表内容存储在会话变量中,以便我可以在 default.asp 中使用它。 不过,我无法正确解决这个问题。
我告诉过我会回到 default.aspx 的 for 循环,所以现在在这个 default.aspx 中我必须搜索并将 devanagri 的每个文本节点替换为古吉拉特语,反之亦然..
我也很困惑,因为我使用的是iis服务器,所以我应该将asp.net的所有项目文件复制到iis的inetpub的wwwroot文件夹中。
如果有人指导我,我将不胜感激!我很抱歉有很多代码..我被卡住了,所以我真的需要帮助,如果对此有任何疑问,请随时发布谢谢!!!
【问题讨论】: