我需要从我的wordpress插件传递一个文件名和位置(send_message.php)到一个javascript文件,这样我就可以在我的js中使用带有ajax的send_message.php。
现在我想的第一件事就是在隐藏的div中回显名称或将其设置为某个标记的属性,然后用js读出该值。但这似乎不太好。
在IRC中,他们告诉我回复一个<script type='application/javascript'> var filename = <?php echo plugins_url(...) ?>
,但这不起作用,因为我也无法访问该变量,并形成我的感觉,这也不是很好的练习。
另一个想法是使用header('Content-Type: text/javascript')
生成* .php文件,然后使用var filename = <?php...
设置变量。这似乎是一个很好的方式(如果使用PHP文件,因为javascript是好的?:P)。但它不起作用,因为wordpress告诉我,当我以某种方式从该文件中调用plugins_url()时没有定义它?
这是一个好方法还是可能更好? (如果这是一个好方法,我如何在我的iAmJS.php文件中使用plugins_url)
答案 0 :(得分:0)
var filename = <?php echo plugins_url(...) ?>
这不起作用,因为plugins_url可能包含一个字符串。在它周围添加引号,以便JavaScript将其视为字符串:
var filename = '<?php echo plugins_url(...) ?>';
答案 1 :(得分:0)
你可以从外部文件中用JS嗅探它:
(function(){ // script filename setter, leaves window.__filename set with active script URL.
if(self.attachEvent){
function fn(e,u){self.__filename=u;}
attachEvent("onerror",fn);
setTimeout(function(){detachEvent("onerror", fn)},20);
eval("gehjkrgh3489c()");
}else{
Object.defineProperty( window, "__filename", { configurable: true, get:function __filename(){
try{document.s0m3741ng()}catch(y){
return "http://" +
String(y.fileName || y.file || y.stack || y + '')
.split(/:\d+:\d+/)[0].split("http://")[1];
}
}})//end __filename
}//end if old IE?
}());
//demo:
alert(__filename);
我承认有点难看,但即使在IE中它也有效......
如果你不关心IE,它可以更短:
Object.defineProperty( window, "__filename", { configurable: true, get:function __filename(){
try{document.s0m3741ng()}catch(y){
return "http://" +
String(y.fileName || y.file || y.stack || y + '')
.split(/:\d+:\d+/)[0].split("http://")[1];
}
}})//end __filename