跨域窗口小部件问题-Python,PHP,Chrome,JavaScript

时间:2018-08-21 13:11:10

标签: javascript python jquery widget cross-domain

这应该是带有通常的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文件。。谢谢您的帮助,我希望这是足够的信息,如果没有的话,我会补充。

0 个答案:

没有答案