如何不将我的源代码复制到其他服务器并向它们提供 JS 或 iframe,就像分析和 statcounter 为我们提供的那样?
我用 JS 写了一个 PHP 脚本,它的基本描述是这样的: 当有人访问我的网站时,获取一个具有唯一标识值的 cookie,同时使用 AJAX 我进行一些检查,并将相同的值相应地保存到 mysql。此后,如果他再次访问我的网站,(在大多数情况下)不会再次创建 cookie。
深度:
cookie 值是用 JS 创建的,我想保留它以备将来增强。
我的代码(index.php
,add-to-mysql.php
)有 JS 和 PHP。
我想在我的其他域中使用此脚本,其中一些域位于不同的服务器中。 但是我不想把我所有的源文件都放到那里。
对我来说,理想的做法是为他们提供 JS 代码,就像 google analytics 或 statcounter 给我们(或其他类似方式)一样,一个 iframe ......像这样的解决方案。
当访问者进入他们的页面时,我在远程服务器(我的服务器)中的 mySQL 将被更新,并且将在他们的站点上创建一个 cookie。来回传输数据。
这有可能实现吗?如果是,我如何开始为此学习?你能给我一些指导吗?
谢谢。
这是一个代码块,ajax 函数将随机数发布到我进行一些操作的 add-to-mysql.php
文件
$.ajax({
type: 'POST',
url: 'add-to-mysql.php',
data: { one: hash }, //an antikatastiso to hash me to a ke kano to md5 meso php sto ajax vgenei to idio
success: function(data) {
alert("success! X: " + data);
}
});
最佳答案
在我看来,您在这里有三个选择。
1.使用 JSONP
JSONP 允许您进行跨域 ajax 调用,这样您就可以从其他域调用您的家庭服务器而不会受到阻碍。 这可能是我想的最简单的路线。
请参阅此处快速了解 JSONP 的工作原理:
https://stackoverflow.com/a/2067584/867294
jQuery 支持 jsonp,所以上手不难:
http://learn.jquery.com/ajax/working-with-jsonp/
JSONP 的工作原理是动态地将脚本添加到文档中,然后调用回调。
javascript 文件的内容需要由服务器生成,您的 PHP 文件 add-to-mysql.php
必须回显如下内容:
<?= htmlspecialchars($_GET["callback"]) =>('someData you want to return');
您也可以通过 $_GET
数组访问从 jQuery 传入的 one:
参数,因为这只是一个 GET
请求。
从客户端你可以这样调用这个路由: 请注意,这将始终是一个 GET 请求,所有参数都将通过 URL。 'callback' 参数是这里的连接因素,它确保 PHP 端知道要生成什么 JavaScript 函数。
$.ajax({
jsonp: 'callback',
dataType: "jsonp",
url: 'http://my-server.com/add-to-mysql.php',
data: { one: hash }, //an antikatastiso to hash me to a ke kano to md5 meso php sto ajax vgenei to idio
success: function(data) {
alert("success! X: " + data);
}
});
<强>2。使用 CORS
CORS 将允许您对不同的域进行 ajax 调用,而不是运行 JS 的域。但是,这确实需要您从服务 html 页面发送特殊的 http header ,因此这确实需要您修改服务器。
查看这里有关 CORS 的快速介绍:
http://www.html5rocks.com/en/tutorials/cors/
简而言之,您需要从服务 html 页面设置的标题是:
Access-Control-Allow-Origin: http://domain.com
Access-Control-Expose-Headers: list,of,headers
3.发布到 iFrame
通过隐藏的 iFrame 发布也是一种选择。
为此,您需要将 form
的 target
设置为 iframe
的 name
,这里的优点是您也可以使用 POST
。您也可以通过 jQuery 提交和填充表单。
$('#one_input').val('someHash');
$('#myForm').submit();
如果您不想在页面上显示,可以将所有内容放在隐藏的 div 中:
<div style='display:none;'>
<form id="myForm" action="http://my-server.com/add-to-mysql.php" method="post" target="my_iframe">
<input type="input" id="one_input" value="" />
</form>
<iframe name="my_iframe" ></iframe>
</div>
如果您不需要任何反馈,也可以使用您的参数设置 iframe 的 url。
var hash = 'stuff';
document.getElementId('one_input').src="http://my-server.com/add-to-mysql.php?one=" + hash;
额外
您也可以将 iframe 与 Window.postMessage 一起使用
以前面的例子为基础:
$('#my_iframe')[0].contentWindow.postMessage('hash', 'my-server.com');
但这要求您已经在 iframe 中加载了一个页面,然后该页面将通过 JavaScript 接收消息,所以我认为这不是您要寻找的。p>
关于javascript - 向其他网页提供 JS 或 iframe 之类的分析和 statcounter 以远程运行我的 PHP + JS 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25106021/