2015-06-04 5 views
9

Also schreibe ich ein jquery Plugin mit grunt, und in meinem Plugin muss ich auch Webservices aufrufen.beste Möglichkeit Relative API URL in einem jquery Plugin zu verwenden

Die Webservice-URL-Domäne ist immer dieselbe Domäne wie der Speicherort der .js-Datei, die der Benutzer für unser Plugin hinzufügen muss. So also Relative

1) Fügen Sie JS-Datei für Plugin

http://mydomain1/js/myfile.js

2) In meinem JS Aufruf API URL

Needs

api_domain: "http://mydomain1/api/v1" 

sein und ich die api wollen Domäne, um relativ zu Domäne der JS-Datei zu sein, die es nennt, versuchte ich

api_domain: "/mydomain1/api/v1" 

Aber das nimmt den Domain-Namen des Browsers auf.

Also habe ich mich gefragt, was der beste Weg, dies

1) einen .NET-Handler zu erreichen, um die richtigen Domain-Namen von context.request.url

2) In Grunt, um ein bestimmten Build erstellen .js für jede Umgebung, die ich bereitstellen werde, die die vollständige URL in der JS hat

3) Weitere Optionen?

+0

Alle Client-seitigen Lösungen sind ein bisschen gefährlich/zerbrechlich. Ich würde die serverseitigen Lösungen empfehlen, die Sie selbst vorgeschlagen haben. Rendern Sie die JavaScript-Datei auf jedem Anwendungsserver und lassen Sie den Client einen fest codierten Wert empfangen. – Brian

Antwort

3

Nun, Sie könnten tatsächlich das Skript finden Sie eine eigene Quelle mit jquery. Stellen Sie sicher, dass Sie der js-Datei einen eindeutigen Namen geben.

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://rawgit.com/demux/4d4ce440d7c379305a9a/raw/findfilehosttest.js"></script>

Actual Script:

$(function(){ 
    var url = $("script[src$='findfilehosttest.js']").attr('src') 
    var matches = url.match(/^https?\:\/\/([^\/?#]+)(?:[\/?#]|$)/i) 
    var domain = matches && matches[1] 
    alert(domain) 
}) 

Aber im Allgemeinen Ich denke, es am besten ist, es einfach zu halten. So kann der Benutzer die URL des Servers manuell einstellen, etwa so:

<script> 
    var MY_API_URL = 'https://instance1.myapiserver.foo' 
</script> 
<script src="/whateverpath/myapiscript.js"></script> 

Dies auch ihnen erlauben würde, das Skript auf dem eigenen Server zu hosten, oder auch Proxy für welchen Gründen auch immer sie haben könnte.

1

Wird sich Ihre JS-Datei in derselben Domäne wie die Webseite befinden? In diesem Fall verwenden Sie einfach window.location.host in Ihrem Plugin, um "http://mydomain" zu erhalten.

+0

Nein, es wird nicht sein, wir werden die JS-Datei hosten und es kann auf jeder Benutzer-Website gehen. – StevieB

+0

Aber Ihr Skript wird in verschiedenen Umgebungen eingesetzt?(Wenn dies nicht der Fall wäre, würden Sie den Domainnamen im Skript schnell und schnell fest codieren ...). –

0

Sie haben versucht, dies in Ihrer JS-Datei zu tun?

var api_version = "v1"; 
var api_domain = (function() { 

var scripts = document.getElementsByTagName('script'); 
var script = scripts[scripts.length - 1]; 
var domain; 

if (script.getAttribute.length !== undefined) { 
    domain = script.src; 
} else { 
    domain = script.getAttribute('src', -1); 
} 

domain = domain.split('/'); 
domain.pop(); 
domain = domain.join('/'); 

var tmp = document.createElement('a'); 
tmp.href = domain; 

var port = tmp.port !== "80" ? ":" + tmp.port : ""; 

return tmp.protocol + '//' + tmp.hostname + port + '/api/' + api_version; 

}()); 

Sie werden auf api_domain Ihren gewünschten Wert haben.

Verwandte Themen