这应该是带有通常的HTML js / div插件代码的简单明了的小部件,但是这里的问题是它不会显示回显的PHP代码(在/中的Python文件的回调中输出的纯HTML格式) Chrome(我正在测试的浏览器)中的cgi-bin /)。当我从BASH shell运行下面的python代码时,它将回显的PHP代码显示为纯HTML,但是当我从Chrome中运行下面的Plugin / HTML代码时,它未显示任何内容。
在php.ini中设置了cgi.force_redirect = 0,所以这不应该成为问题。由于cgi-bin / php的安全性,Chrome先前针对PHP代码回调引发了错误,但php.ini中的设置不再抛出该错误。
当我现在运行它时,Chrome中没有显示错误,但是它没有显示任何应该来自PHP回显代码的HTML代码(应该从Python回调显示)。没有任何回调问题,因为它设置为通过Python仅显示纯字符串(非PHP输出)时显示JSONP。因此,可以确定它正在跨域显示数据。
我根本不太了解Python,所以这可能是这里的问题。对我来说这是一个令人困惑的问题,我花了几天的时间试图弄清楚这一切,然后才来找专家!
这是插件/ HTML 代码(包含在第三方域(跨域)中,而不是example.com中):
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<script src="https://example.com/widget/widget.js" type="text/javascript"></script>
<div id="widget"></div>
</body>
</html>
这是 JavaScript 代码(widget.js):
(function() {
// Localize jQuery variable
var jQuery;
/******** Load jQuery if not present *********/
if (window.jQuery === undefined) {
var script_tag = document.createElement('script');
script_tag.setAttribute("type","text/javascript");
script_tag.setAttribute("src",
"https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js");
if (script_tag.readyState) {
script_tag.onreadystatechange = function () { // For old versions of IE
if (this.readyState == 'complete' || this.readyState == 'loaded') {
scriptLoadHandler();
}
};
} else {
script_tag.onload = scriptLoadHandler;
}
// Try to find the head, otherwise default to the documentElement
(document.getElementsByTagName("head")[0] || document.documentElement).appendChild(script_tag);
} else {
// The jQuery version on the window is the one we want to use
jQuery = window.jQuery;
main();
}
/******** Called once jQuery has loaded ******/
function scriptLoadHandler() {
// Restore $ and window.jQuery to their previous values and store the
// new jQuery in our local jQuery variable
jQuery = window.jQuery.noConflict(true);
// Call our main function
main();
}
/******** Our main function ********/
function main() {
jQuery(document).ready(function($) {
/******* Load CSS *******/
var css_link = $("<link>", {
rel: "stylesheet",
type: "text/css",
href: "widget-styles.css"
});
// css_link.appendTo('head');
//alert(element);
/******* Load HTML *******/
var jsonp_url = "https://example.com/cgi-bin/widget-python.py?callback=?";
$.getJSON(jsonp_url, function(data) {
$('#widget').html("This data comes from another server: " + data.html);
});
});
}
})(); // We call our anonymous function immediately
这是/ cgi-bin /中包含的 Python 代码,是从widget.js(widget-python.py)调用的:
#!/usr/bin/python
import cgi
import subprocess
params = cgi.FieldStorage()
print "Content-Type: text/javascript\n"
proc = subprocess.Popen("php <pathtophpfile>.php", shell=True, stdout=subprocess.PIPE)
result = proc.stdout.read()
jsonp = "%s ( {'html': " + result + " } )"
#jsonp = "%s ( {'html': 'printastring' } )" THIS WORKS and prints into Chrome when its commented out, but its just a string, and what I need is the PHP output from the result variable above.
#print result This prints the php code out perfectly into the command line when I run execute the python script from within /cgi-bin
print jsonp % params['callback'].value
对于应该被回显到Chrome中的PHP代码(pathtophpfile.php),其输出是纯HTML div到div,并且在运行时显示在终端中,因此Python正在查找并运行PHP文件。。谢谢您的帮助,我希望这是足够的信息,如果没有的话,我会补充。