gpt4 book ai didi

javascript - 无法对 Firefox 扩展中的 Ajax 响应执行任何操作

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

我正在编写一个简单的 AJAX 调用,它返回一个完整 HTML 页面,然后我尝试从该响应中获取一些我需要的值。我不知道为什么它不起作用,我已经做了我能想到的一切。当我将我的代码作为另一个 HTML 页面的一部分而不是 Firefox 扩展的一部分时,它有效,这就是问题所在:我正在编写 Firefox 扩展!

在 Firefox 扩展中,我得到了一个响应,我可以发出警报,它就在那里(即我看到了响应文本)!但我不能调用 .find.filter 或其他任何东西。代码在 success 函数的某个点悄无声息地中断,没有任何反应。

这是我的代码:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>runthis</title>

<script type="text/javascript" language="javascript" src="jquery-1.6.2.js"></script>

<script type="text/javascript">
$(document).ready(function(){
$('input').click(function(){
var makeTransferURL = "empty";
var pc = "empty";

$.ajax({//Transfer
type: "POST",
url: "http://localhost/transfer2.html",
data: "",
dataType: "html",
context: document.body,
success: function(response){
var table = $(response).find('table.123RowSeparator');
var a = table.find('a[href*="123"]');
var href = a.attr("href");
makeTransferURL = href;
var link = makeTransferURL.indexOf('PC_');
pc = makeTransferURL.substring(link, (link + 11));
alert(pc);
},
error: function() {
alert("Sorry, The requested property could not be found.");
}
});
});
});
</script>
</head>
<body>
<input type="button" value="load" />
</body>
</html>

与 firefox 扩展完全相同的代码不起作用:

    window.addEventListener("load", function() { myExtension.init(); }, false);

var myExtension = {
init: function() {
gBrowser.addEventListener("DOMContentLoaded", myExtension.onPageLoad, true);
},
onPageLoad: function(aEvent) {
var doc = aEvent.originalTarget; // doc is document that triggered "onload" event

if(doc.location.href=="http://localhost/index2.html") {

var makeTransferURL = "empty";
var verifyTransferURL = "empty";
var confirmTransferURL = "empty";
var token1 = "empty";
var token2 = "empty";
var pc = "empty";

$.ajax({//Transfer
type: "POST",
url: "http://localhost/transfer2.html",
data: "",
cache: false,
async: false,
dataType: "html",
context: document.body,
success: function(response){
var table = $(response).find('table.123RowSeparator');
var a = table.find('a[href*="123"]');
var href = a.attr("href");
makeTransferURL = href;
var link = makeTransferURL.indexOf('PC_');
pc = makeTransferURL.substring(link, (link + 11));
alert(pc);
},
error: function() {
alert("Sorry, The requested property could not be found.");
}
});
}
aEvent.originalTarget.defaultView.addEventListener("unload", function(){ myExtension.onPageUnload(); }, true);
},
onPageUnload: function(aEvent) {}
}

我需要知道为什么!

这是响应的 HTTP header :

HTTP/1.1 200 OK
Date: Mon, 11 Jul 2011 10:43:32 GMT
Server: Apache/2.2.19 (Win32)
Last-Modified: Wed, 06 Jul 2011 12:41:47 GMT
ETag: "9000000015529-f7b9-4a765ec7780ff"
Accept-Ranges: bytes
Content-Length: 63417
Keep-Alive: timeout=5, max=97
Connection: Keep-Alive
Content-Type: text/html

最佳答案

找到了解决方案,它不是优雅的(或正确的做法)但让我休息一下!没有人回答:)

以下是我为使其正常工作所做的工作:

$('#divid').css('display', 'none');
response = response.replace(/<head>(?:.|\n|\r)+?<\/head>/ig, "");
doc.getElementById('divid').innerHTML = response.replace(/<script[^>]*>[\S\s]*?<\/script[^>]*>/ig, "");
var table = $('#divid').find('whateveryoufeellike');

所以我认为问题是我得到的是纯 HTML 格式的字符串,我不能在这样的字符串上使用 .find 和 .filter 等 jQuery 函数。获取字符串并使用正则表达式,将其从头部和脚本标签中剥离,然后(可能过早地处理图像)将剩余的内容转储到我创建的 Div 中。但不是在将 div 设置为隐藏之前,这样代码就不会显示。用户真的感觉没有什么不同,我现在可以将 DOM 用于母页并运行所有我想要的 .finds 和 .filters!

它的美妙之处在于,只要您在页面中创建的 Div 的名称对于该页面是唯一的,同一页面上具有相同 id/class 的标签之间就不会出现任何冲突问题。所以真正随机的东西会是一个不错的选择 :D 建议... !HWSyujtewq$y$y$w£t!"£%^(&)%$dsfdgjnbfdvsc

关于javascript - 无法对 Firefox 扩展中的 Ajax 响应执行任何操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6649109/

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