Me encontré con esto al intentar integrar la caída de Dropbox en la API del selector en un complemento que estoy escribiendo.
La documentación de la API le indica que coloque la siguiente script
etiqueta en la parte superior de su archivo:
<script type="text/javascript" src="https://www.dropbox.com/static/api/1/dropins.js" id="dropboxjs" data-app-key="MY_APP_KEY"></script>
Todo bien, y en realidad funciona cuando lo pego directamente en la página que se llama en la sección de administración. Pero, me gustaría usar alguna variación de wp_register_script (), wp_enqueue_script () y wp_localize_script () para pasar la identificación necesaria y la clave de aplicación de datos.
He probado un par de variaciones diferentes de esto:
add_action('admin_enqueue_scripts', 'add_dropbox_stuff');
function add_dropbox_js() {
wp_register_script('dropbox.js','https://www.dropbox.com/static/api/1/dropins.js');
wp_enqueue_script('dropbox.js');
wp_localize_script('dropbox.js','dropboxdata',array('id'=>"dropboxjs",'data-app-key'=>"MY_APP_KEY"));
}
Y:
add_action('admin_enqueue_scripts', 'add_dropbox_stuff');
function add_dropbox_stuff() {
wp_register_script('dropbox.js','https://www.dropbox.com/static/api/1/dropins.js');
wp_enqueue_script('dropbox.js');
wp_localize_script('dropbox.js','dropboxdata',array(array('id'=>"dropboxjs"),array('data-app-key'=>"MY_APP_KEY")));
}
MY_APP_KEY se reemplaza con la clave de aplicación apropiada en mi código. Agradecería cualquier dirección. Gracias.
EDITAR: También intenté hacerlo con un poco de jquery, pero fue en vano. Probé con la carga del documento y con el documento listo Me devuelve un {"error": "clave_aplicación no válida"}.
$('script[src="https://www.dropbox.com/static/api/1/dropins.js?ver=3.6"]').attr('id','dropboxjs').attr('data-multiselect','true').attr('data-app-key','MY_APP_KEY');
fuente
wp_localize_script
que debe hacer es imprimir un objeto codificado con json en la salida html de la página. El script reconoce este objeto, por lo que puede usarlo. Lo que necesita es agregar algunos atributos a la etiqueta del script, porwp_localize_script
lo que no puede ayudarlo.wp_localize_script
y no crea atributos de script. Pero, ¿es posible pasar la clave de la aplicación directamente a dropbox.js? Solo una suposición, pero ¿lo has intentadoarray('appKey'=>"MY_APP_KEY")
? Este es el código que toma la clave del atributoif(!Dropbox.appKey){Dropbox.appKey=(e=document.getElementById("dropboxjs"))!=null?e.getAttribute("data-app-key"):void 0}
wp_localize_script
seguridad de que puede pasar atributos al script. Realmente no sé si esto funcionará o no, sin embargo, no es un asunto relacionado con Worpress.Respuestas:
puede intentar usar el
script_loader_src
gancho de filtro, por ejemplo:Actualizar
Acabo de darme cuenta de que esc_url escapa al src, así que busqué un poco más y encontré el
clean_url
filtro que puede usar para devolver el valor con su identificación y datos clave de la aplicación:fuente
<script type='text/javascript' src='https://www.dropbox.com/static/api/1/dropins.js?ver=3.6'id='dropboxjs'data-app-key='MY_APP_KEY'></script>
Desde WP 4.1.0, un nuevo gancho de filtro está disponible para lograr esto fácilmente:
script_loader_tag
Úselo de esta manera:
fuente
OK, me parece (a mí) que con
wp_enqueque_scripts
no es posible imprimir la identificación y la clave de la aplicación como atributos de etiqueta de script.Estoy seguro al 90%, porque
WP_Dependencies
no es una clase que conozco bien, pero mirando el código no me parece posible.Pero estoy seguro al 100% de que usar
wp_localize_script
es no útil para su alcance .Como dije en mi comentario anterior:
Lo que no he dicho en el comentario es que el objeto codificado con json como un nombre arbitrario que usted decide, de hecho, mirando la sintaxis:
El objeto llamado
$object_name
podría ser utilizado por el guión porque es en el ámbito global e impreso en el código HTML de la página.Pero el
$object_name
es un nombre que usted decide, por lo que puede ser todo .Entonces pregúntate a ti mismo:
¿Cómo el script en el servidor remoto de Dropbox puede hacer uso de una variable que no saben cómo se llama?
Por lo tanto, no hay ninguna razón para pasar la identificación y / o la clave de la aplicación al script con
wp_localize_script
: solo debe imprimirlos como atributos de etiqueta de script como se dice en los documentos de la API de Dropbox.No soy desarrollador de js, pero creo que lo que hace el script de dropbox es:
<script>
elementos html en la páginaTenga en cuenta que no lo sé con certeza, solo estoy adivinando .
De esta manera, el script cargado desde el servidor de Dropbox puede verificar la clave de su aplicación de una manera que sea fácil para ellos y fácil de implementar para usted.
Debido a que en la primera oración dije que no es posible imprimir la identificación y la clave de la aplicación en el guión
wp_enqueque_scripts
, la moraleja de la historia es que debe imprimirlos en el marcado de otra manera.Una forma que no huele demasiado (cuando no hay alternativas) es usar
wp_print_scripts
hook para imprimir la etiqueta del script:fuente
echo
declaración no hace ninguna solicitud HTTP por lo que puedo decir, y WordPress tambiénwp_enqueue_script
hace un eco (ver core.trac.wordpress.org/browser/tags/4.9/src/wp-includes/… ) Seguramente podría reducir el número de solicitudes combinando el script con algún otro script que tenga pero: 1) el script existe en un servidor de terceros en este caso 2) con HTTP 2 hoy en día, combinar el script reduciría el rendimiento, no lo aumentaría. ¿Entonces tal vez extraño algo?De la respuesta de Bainternet arriba. Este código me funcionó.
Editar: La única diferencia con el código de Bainternet es que agregué una condición para verificar si la URL del script es Dropbox y si es un archivo .js.
Estoy ignorando todas las otras URL y reescribiendo la URL de Dropbox.
fuente
Hice un poco de comprobación en el código dropbox.js (v2) para ver qué estaba sucediendo y cómo resolverlo mejor. Como resultado, la clave de aplicación de datos solo se usa para establecer la variable Dropbox.appKey. Pude establecer la variable con la siguiente línea adicional.
Usando el ejemplo de JavaScript en la página de Dropbox https://www.dropbox.com/developers/dropins/chooser/js :
En mi código configuro Dropbox.appKey en cada lugar donde hago referencia a las rutinas de JavaScript de Dropbox. Hacer esto me permitió usar wp_enqueue_script () sin los parámetros adicionales.
fuente
Hice esto con mi complemento eCards y es realmente simple.
Aquí hay una copia directa / pegar desde el complemento:
Observe que la clave API se pasa a través de una opción.
fuente
Hay una manera más simple de hacer esto
fuente
Sintaxis de Wordpress para script_loader_tag :
Para agregar cualquier atributo, puede modificar su etiqueta $ de esta manera:
Que escapará correctamente de la URL.
fuente
Gracias por todas las publicaciones, realmente ayudaron. Hice rodar mi propia versión para darle algo de estructura y facilitar su lectura y actualización. Use en cola como de costumbre, use script para archivos CSS con una etiqueta falsa al final para que se cargue en la parte superior. Aunque probablemente se pueda simplificar un poco.
fuente