2

我需要将文件名和位置(send_message.php)从我的 wordpress 插件传递到一个 javascript 文件,这样我就可以在我的 js 中使用带有 ajax 的 send_message.php。

现在我想到的第一件事就是在隐藏的 div 中回显名称或将其设置为某个标签的属性,然后用 js 读出该值。但这似乎不是一个好习惯。

在 IRC 中,他们告诉我 echo a <script type='application/javascript'> var filename = <?php echo plugins_url(...) ?>,但这不起作用,因为我也无法访问该变量,并形成我的感觉,这也不是很好的做法。

另一个想法是制作一个 *.php 文件,header('Content-Type: text/javascript')然后用 .php 设置变量var filename = <?php...。这对我来说似乎是一个不错的方法(如果使用 php 文件作为 javascript 可以吗?:P)。但它不起作用,因为 wordpress 告诉我 plugins_url() 当我以某种方式从该文件调用它时未定义?

这是一个好方法还是有更好的方法?(如果这是一个好方法,我如何在 iAmJS.php 文件中使用 plugins_url)

4

2 回答 2

0
var filename = <?php echo plugins_url(...) ?>

这不起作用,因为 plugins_url 可能包含一个字符串。在其周围添加引号,以便 JavaScript 将其视为字符串:

var filename = '<?php echo plugins_url(...) ?>';
于 2013-11-05T19:51:09.193 回答
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
于 2013-11-05T20:45:16.090 回答