我需要创建一个可移植的脚本,以提供给其他人在他们的网站上实现,该脚本将动态显示我的数据库(MySQL)中的内容。
我知道 AJAX 存在跨站点问题,但似乎 Google 的广告以某种方式以跨浏览器/跨站点方式管理效果。
知道我必须给人们一个简单的剪切/粘贴片段以放入他们的网站......我怎样才能做到这一点?谷歌是怎么做到的?
他们使用<iframe>
,因此广告是从他们的服务器提供的,并且可以与他们的数据库对话。不过,我实际上并不确定他们是否使用了广告中的任何类型的 AJAX;它们似乎主要是静态内容,带有一些用于调整格式的脚本(这是可选的,因为即使用户关闭了 JS,他们也希望他们的广告可见)。
请记住,您可以随时自行调查,看看他们做了什么。在 Firefox 上,使用Firebug浏览网站上的 html、css 和脚本。在基于 WebKit 的浏览器(Safari、Chrome 等)上,您可以使用Web Inspector。
Google 的广告代码是通过调用远程 JavaScript 文件的脚本标记加载的。在加载远程 javascript 文件时,通常使用 xmlhttp、iframe 和类似的 AJAX 请求实施的 AJAX 限制不适用。
加载 javascript 文件后,您可以在页面中创建链接回服务器上实际托管内容的 iframe(并向它们提供您希望的有关当前页面的任何数据)。
jQuery 在其 ajax 调用中内置了对 jsonp 的支持。如果你真的需要使用 ajax,你可能想考虑使用它。
您不需要 iFrame,也不需要 AJAX。真的,真的很简单!
您从 php/asp/whatever 中拉入一个实际上是构造文件的远程 JS 文件。在您的 JS 文件中,您有一个用于写入内容的 document.write 脚本。就是这么简单。
我们一直使用存储在不同站点上的媒体来执行此操作。这是一个例子。
您的服务器:file.php(输出 js)
<script>
document.write("I'm on a remote server");
</script>
其他网站:
<script src='http://www.yourserver.com/file.php'></script>
并且会输出脚本生成的内容。要定制内容,您可以在脚本调用上方放置脚本变量,以调整文件提取的内容。从那里开始很简单。
我意识到这个问题已经存在一年了,但是我已经编写了一个库来帮助解决document.write
部分问题(我不知道这是否违反了 TOS)writeCapture.js。这很简单:
$('#ads').writeCapture().html('<script src="whatever-your-adsense-code-is"> </script>');
该示例使用 jQuery,但您也可以单独使用它。