사용자가 버튼을 제출할 때 페이지 URL을 가져 와서 데이터베이스에 저장하는 확장 프로그램을 만들고 있습니다.크롬 확장 Ajax 요청을 통해 데이터베이스에 값을 저장할 수 없습니다.
나는 이것에 붙어있어, 나는 내가 식별 할 수없는 확장 부분에 뭔가가 빠져 있다고 생각한다. 그저 학습 프로젝트이므로 어떤 검증도 포함하지 않았습니다.
다음은 몇 가지 세부 사항입니다.
의 manifest.json은
{
"manifest_version": 2,
"name": "Hello Extention",
"description": "POST details of the current page.",
"version": "0.1",
"content_scripts": [{
"js": ["contentscript.js"],
}],
"web_accessible_resources": ["script.js"],
"background": {
"scripts": ["background.js"],
"persistent": true
},
"browser_action": {
"default_icon": "icon.png",
"default_popup": "popup.html"
},
"permissions": [
"contextMenus",
"bookmarks",
"tabs",
"http://*/",
"https://*/"
]
}
이 지금 내 popup.html
<input type="text" name="url" id="url" value=""><br>
<input type="text" name="title" id="title"></br>
<input type="button" name="submit" value="Go" id="submit"><br>
background.js
chrome.tabs.getSelected(null, function (tab) {
var tabId = tab.id;
var tabUrl = tab.url;
var tabTitle = tab.title;
document.getElementById("url").value = tabUrl;
document.getElementById("title").value = tabTitle;
chrome.browserAction.setBadgeText({
text: "10+"
});
});
입니다 사용자가 이동 버튼을 클릭 할 때 내가 지금 alert(reply)
날 전체 Updatedata.php 대신 환영 메시지를 보내는 파일을 반환
<?php
echo "welcome";
include('connection.php');
$url = $_GET['url'];
$title = $_GET['title'];
mysql_query("insert into `data` VALUES('','$url','$title');");
?>
updatedata.php 아약스 요청
$("#submit").click(function() {
document.getElementById("load").innerHTML = "<img style='height:30px;' src='/img/loading- sprocket-gray-light-transparent.gif' />";
var title = document.getElementById("title").value;
var url = document.getElementById("url").value;
var xhr = new XMLHttpRequest();
if (!xhr) {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
xhr.open("post", "updatedata.php", true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send("url=" + url + "&title=" + title);
xhr.onreadystatechange = function() {
if (xhr.status == 200 && xhr.readyState == 4) {
reply = xhr.responseText;
alert(reply);
}
}
});
라고했다. 나 또한 코드를 별도로 (즉, 확장명이 아닌) 실행 해 보았습니다. 해당 경고를 환영하며 데이터베이스에 값을 삽입했습니다. 그래서 Ajax 요청이나 PHP 파일에는 아무 문제가 없다고 생각합니다. 하지만 요청이나 무언가를 보내는 방법에 대한 연장 사항이 누락되었다고 생각합니다.
Chrome 확장 프로그램에서는 PHP를 사용할 수 없습니다. 서버에 넣고 서버에 요청을 보냅니다. 그리고 PHP 스크립트에서 눈부신 SQL 주입 취약점을 해결하십시오 ... –
답장을 보내 주셔서 감사합니다. 로컬 호스트에서 실행되지 않습니다. 온라인 어딘가에 넣어야합니까? – nitte93user3232918
로컬 컴퓨터에서 PHP 서버를 시작한 경우에만 "localhost에서 실행"됩니다. "온라인"으로 설정하는 것도 효과가 있습니다. 로컬 액세스가 가능한 키 - 값 저장소 만 원한다면 ['chrome.storage'] (https://developer.chrome.com/extensions/storage)를 사용하십시오. 본격적인 데이터베이스는 [IndexedDB'] (https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API)의 형태로도 제공 될 수 있지만 지식 수준이 주어지면 그것을 사용하려고 시도조차하지 않습니다. –