使用PHP更新external.js中的Javascript变量


Update Javascript variables within external .js using PHP?

我正在尝试创建一个Javascript文件,我可以从其他域引用该文件,该文件将允许更改用户页面的外观。

例如,javascript文件(www.mywebsite.com/123.js)将在www.userwebsite.com上引用,并可能包含以下内容:

var thebody = document.getElementsByTagName('body')[0];
var newdiv = document.createElement('div');
var txtNode = document.createTextNode("Hello. This is a new node.");   
var divIdName = "mydiv";
var csslink = "http://www.anotherwebsite.com/style.css";
var newcss = document.createElement('link');
newcss.setAttribute('href',csslink);
newcss.setAttribute('rel','stylesheet');
newcss.setAttribute('type','text/css');
newdiv.setAttribute('id',divIdName);
newdiv.appendChild(txtNode);
thebody.appendChild(newdiv);
thebody.appendChild(newcss);

这将插入对用户网站上托管的CSS文件的引用,并在DOM中添加一个新的div,文本节点为"Hello。这是一个新节点。"

我希望用户能够登录到CMS(我将构建),这样他们就可以更改打印到页面上的文本,而无需更改我提供给他们的Javascript文件。CMS将托管在我的网站上。

这样做的最佳做法是什么?

显然,我可以远程编辑javascript文件,而用户无需更改任何内容,但这是更新脚本的最佳方法吗?

我想在javascript中有一个Ajax请求,它从引用mysql数据库的php文件中检索输出,其中包含用户想要更改的文本——然而,同源策略意味着这是不可能的。

感谢

您不需要使用AJAX来检索PHP输出;让客户端向其页面添加<script />标记,并将src属性设置为PHP输出;只需确保您的脚本发出有效的JavaScript即可。

由于您的web服务器现在认为它在PHP领域,而不是JS资产,请确保发出正确的页头;MIME类型和过期时间跃然纸上。

header('Content-Type: application/x-javascript');
header('Last-Modified: Mon, 03 Sep 2012 22:33:44 GMT');

此外,要注意您的脚本将在不可靠和"敌对"的环境中执行。您应该尽量减少JavaScript脚本声明的全局变量的数量,以降低冲突的风险。最简单的方法是将代码封装在IIFE中;

// Look ma, no global variables!
(function () {
var thebody = document.getElementsByTagName('body')[0];
var newdiv = document.createElement('div');
var txtNode = document.createTextNode("Hello. This is a new node.");   
var divIdName = "mydiv";
var csslink = "http://www.anotherwebsite.com/style.css";
var newcss = document.createElement('link');
newcss.setAttribute('href',csslink);
newcss.setAttribute('rel','stylesheet');
newcss.setAttribute('type','text/css');
newdiv.setAttribute('id',divIdName);
newdiv.appendChild(txtNode);
thebody.appendChild(newdiv);
thebody.appendChild(newcss);
}());

您还应该考虑为CSS类、元素ID等添加前缀,以最大限度地减少与主机命名方案的冲突。