下午好,
我的Chrome扩展程序与页面中的iFrame交互。 iFrame加载一个数据网格,一次25个结果。有一些导航按钮可以使用下一个/上一组结果刷新iFrame。
目标是向内容脚本发送值,让内容脚本导航iFrame(通过必要的许多页面),然后将结果值发送回后台脚本。
在导航iFrame并搜索字段之前,我很难让内容脚本返回到后台脚本。
1)在browserAction上,后台脚本向内容脚本发送消息:
function resolveMulti(tabID, city){
message.sendMessage(tabID, {
"resolvemulti": city
}, function(response){
if(response["Details"]=="Property Not Found"){
console.log('Property Not Found');
}
else if(response["Details"]=="No City Match Found"){
console.log('No City Match Found');
}
else if(response["Details"]=="Found"){
console.log('Found');
}
})
return;
}
2)内容脚本将响应以下函数的返回:
function resolveMulti(city){
var results = "No City Match Found";
//If zero results
if($("#totalProperties").html()==""){
return "Property Not Found";
}
grid= document.getElementById("grid"); //<-- is iframe
formGrid= grid.contentWindow.document.getElementById("formGrid");
totalPages = grid.contentWindow.document.getElementById("totalPages").value;
currentPage = grid.contentWindow.document.getElementById("currentPage").value;
while(currentPage<totalPages&&results=="No City Match Found"){
//code to search for results, which works on each page
var resultsArray = $("iFrame").contents().find("#gridMain tr[id*='row'] td:nth-child(13)");
resultsArray.each(function(index){
if($(this).html().toLowerCase() == city.toLowerCase()){
results = "Found";
$(this).click();
return false;
}
});
$("#nextPageBtn").click();
}
return results;
}
我曾希望while循环会迭代:
但事实并非如此。一秒钟我在第一页上,然后我在最后一页(比如说11),然后后台脚本收到一个&#34; No City Match Found&#34; - 虽然我知道结果位于第8页......
有时出现的另一个问题是,脚本有时会在iFrame正确加载之前尝试运行(这会引发错误)。一旦加载了iFrame,脚本就会以某种方式迭代。
我应该如何修复函数,以便函数在将结果返回到后台脚本之前正确检查每个页面?
谢谢大家!