gpt4 book ai didi

javascript - 如何在 Chrome 扩展中使用 AJAX 发出 POST 请求?

转载 作者:行者123 更新时间:2023-12-01 08:29:19 27 4
gpt4 key购买 nike

当浏览器在我的网页上时,我试图进行 ajax 调用,它运行良好,但是一旦我离开我的域,它就会失败。这是一个封闭的系统,用户知道他们正在被跟踪,所以没有任何可疑的事情发生。我在域外的所有内容上都收到错误 406。例如,如果我在 www.mywebpage.com 的 URL 上,脚本可以完美执行,但是一旦我访问 www.yourwebpage.com,它就会返回错误。

我尝试将 manifest.json 中的权限设置为我的 URL、所有 url、特定 url,但它的行为方式相同。这是我的背景.js

chrome.runtime.onMessage.addListener
(
function(message, sender, sendResponse)
{
if(message.applicationcode=="VALIDAPPLICATIONKEY")
{
var salt=message.salt;
var learnerid=message.learnerid;
var behaviorkey=message.behaviorkey;
var behaviorname=message.behaviorname;
var behaviorkeyname=message.behaviorkeyname;
chrome.tabs.query
(
{active: true},
function(arrayOfTabs)
{
var data = new FormData();
data.append('Salt', salt);
data.append('LearnerID', learnerid);
data.append('BehaviorKey', behaviorkey);
data.append('BehaviorName', behaviorname);
data.append('BehaviorKeyName', behaviorkeyname);
data.append('BehaviorValue', arrayOfTabs[0].url);
var xhr = new XMLHttpRequest();
xhr.open('POST', 'https://www.mywebpage.com/myservice.php', true);
xhr.onreadystatechange = function()
{
if (xhr.readyState == 4)
{
// JSON.parse does not evaluate the attacker's scripts.
var resp = JSON.parse(xhr.responseText);
console.log(resp);
}
}
xhr.send(data);
}
);//end query
return true;
}
}
);//end listener

这是我当前的 list 文件。
{
"manifest_version": 2,
"name": "Application",
"description": "Plugin",
"version": "1.0",
"background":
{
"scripts": ["jquery.js","background.js"],
"persistent": true
},
"permissions": [
"tabs","http://www.mywebpage.com/*","https://www.mywebpage.com/*"

],
"browser_action":
{
"default_icon": "icon.png",
"default_popup": "popup.html"
},
"content_scripts":
[
{
"matches": ["<all_urls>"],
"js": ["jquery.js","popup.js"]
}
]
}

对此的任何想法或帮助将不胜感激。根据文档 here我正在尝试做的事情是扩展允许的,并且确实以有限的方式工作。或者是否应该按照建议在扩展页面中进行这种类型的操作 here ?我是编写 Chrome 扩展程序的新手,我确信我错过了一些愚蠢的东西。

提前致谢。

最佳答案

这是我的解决方案:

list .json:

{
"manifest_version": 2,
"name": "My Name",
"description": "My Description.",
"version": "0.1",
"background":
{
"scripts": ["jquery.js","background.js"],
"persistent": true
},
"permissions":
[
"tabs",
"storage"
],
"browser_action":
{
"default_icon": "icon.png",
"default_popup": "popup.html"
},
"content_scripts":
[
{
"matches": ["https://www.myurl.com/*"],
"js": ["jquery.js","popup.js"],
"run_at": "document_end"
}
]
}

背景.js:
var learnerid=0;
// Called when the user clicks on the browser action.
chrome.tabs.onUpdated.addListener
(
function (tabId, changeInfo, tab)
{
if (changeInfo.status == 'complete')
{
chrome.tabs.query
(
{
active: true
},
function (tabs)
{
if(learnerid!=0)
{
TrackURL(tabs);
}
else
{
console.log("User not logged in yet!");
}//end if
}
);//end query
}
}
);

chrome.runtime.onMessage.addListener
(
function(message, sender, sendResponse)
{
if(message.applicationcode=="appname")
{
learnerid=message.learnerid;
}//end if
}
);//end function


function TrackURL(tabs)
{
$.ajax
(
{
type: "POST",
url: "http://www.myurl.com/action.php",
dataType:"json",
data:
{
Action: 'TrackURL',
URL:tabs[0].url,
Title:tabs[0].title,
LearnerID:learnerid
},
success: function(msg)
{
console.log("URL Tracked");
}//end function
}
);//End ajax

}//end function

popup.js:
document.addEventListener
(
"starttrack",
function(e)
{
startPoll(e.detail);
}
);


function startPoll(e)
{
chrome.runtime.sendMessage
(
{
applicationcode: "myapp",
learnerid: e,
}
);
}

从我的网页:
function SendLearnerID(value)
{
try
{

var event = new CustomEvent("starttrack",{'detail': value});
document.dispatchEvent(event);
}
catch(err)
{
console.log(err);
}

}//end function

我的问题是我最初的事件调用发生在网页内....因此出现 406 错误。希望这对其他人有帮助。

关于javascript - 如何在 Chrome 扩展中使用 AJAX 发出 POST 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24016609/

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