我解析一個網頁,並根據內容,我需要一個ajax調用我的本地主機。 在本地主機上將是一個PHP腳本,它將通過AJAX交換數據,可能是JSON格式(我還不確定,仍在閱讀和測試)。Javascript,ajax,跨域調用,覆蓋內容安全策略
這是一個插件,我嘗試谷歌網頁測試過
我按照這個簡單的Ajax例子:
https://www.w3schools.com/xml/ajax_xmlhttprequest_response.asp
我成功撥打了電話本身
//loadDoc("http://localhost/index.php", myCallback); <-- this NOT
//loadDoc("https://www.google.de", myCallback); <-- this WORKS
/*
Content Security Policy: Ignoring 「'unsafe-inline'」 within script-src: ‘strict-dynamic’ specified (unknown)
Content Security Policy: Ignoring 「https:」 within script-src: ‘strict-dynamic’ specified (unknown)
Content Security Policy: Ignoring 「http:」 within script-src: ‘strict-dynamic’ specified
*/
function loadDoc(url, cFunction) {
var xhttp;
xhttp=new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
cFunction(this);
}
};
xhttp.open("GET", url, true);
xhttp.send();
}
function myCallback(xhttp) {
alert("I'm alive from my local server");
}
(BIG)問題是我發現「內容安全策略」不允許我打電話給其他域,即使我在我自己的環境中(我的瀏覽器,FF 53)。
現在看來,這至少可以很容易地欺騙GET請求,正如我需要,通過在DOM中插入腳本,這樣
和Rob特別是這個偉大的職位W¯¯
Insert code into the page context using a content script
所以我嘗試這樣,但仍然不工作。
// var actualCode = ['/* Code here. Example: */' + 'alert(0);',
// '// Beware! This array have to be joined',
// '// using a newline. Otherwise, missing semicolons',
// '// or single-line comments (//) will mess up your',
// '// code ----->'].join('\n');
var script = document.createElement('script');
script.src = "http://localhost/index.php";
script.type = "text/javascript";
document.appendChild(script);
// script.textContent = actualCode;
// (document.head||document.documentElement).appendChild(script);
// script.remove();
安全性不是問題,因爲我只使用我的本地主機。 我在這裏想念什麼?
EDITED
這些是由火狐調試器顯示誤差
Blocked loading mixed active content 「http://localhost/index.php」[Learn More] axtest.js:16
Content Security Policy: Ignoring 「'unsafe-inline'」 within script-src: ‘strict-dynamic’ specified (unknown)
Content Security Policy: Ignoring 「https:」 within script-src: ‘strict-dynamic’ specified (unknown)
Content Security Policy: Ignoring 「http:」 within script-src: ‘strict-dynamic’ specified
如果您的CSP不允許您訪問遠程腳本,但您想訪問遠程腳本......爲什麼不改變您的CSP? – Quentin
@Silly - 這是CSP而不是CORS。 – Quentin
感謝您的澄清,因此我添加了PHP專有技術。我被跨域ajax調用鏈接弄糊塗了。因此,請使用正確的CSP標題,而不是添加正確的CORS標題。 – Shilly