2015-06-04 31 views
9

Quindi sto scrivendo un plugin jquery usando grunt, e nel mio plugin devo anche chiamare i servizi web.il modo migliore per utilizzare l'Url dell'API relativo in un plug-in jquery

Il dominio dell'URL del webservice sarà sempre lo stesso dominio della posizione del file .js che l'utente deve aggiungere per il nostro plug-in. Così cioè relativa

1) include file JS per il plugin

http://mydomain1/js/myfile.js

2) Nella mia chiamata JS URL API

deve essere

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

E voglio l'API dominio relativo al dominio del file JS che lo chiama Ho provato a fare

api_domain: "/mydomain1/api/v1" 

Ma questo preleva il nome di dominio del browser.

Così mi chiedevo cosa il modo migliore per raggiungere questo

1) utilizzare un gestore di .NET per inserire il nome di dominio direttamente dal context.request.url

2) In Grunt costruire creare una specifica .js per ogni ambiente che distribuirò a cui è presente l'url completo nel JS

3) Altre opzioni?

+0

Tutte le soluzioni lato client sono un po 'pericolose/fragili. Consiglierei le soluzioni lato server che tu stesso hai suggerito; rendere il file javascript su ogni server delle applicazioni e lasciare che il client riceva un valore codificato. – Brian

risposta

3

Bene, si potrebbe effettivamente avere lo script trovare la propria fonte utilizzando jquery. Assicurati solo di dare al file js un nome abbastanza unico.

<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>

script vero:

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

Ma in generale penso che sia meglio per mantenere le cose semplici. Quindi consentire all'utente di impostare l'URL del server manualmente, in questo modo:

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

Ciò consentirebbe anche loro di ospitare lo script sul proprio server, o anche di proxy per quale motivo potrebbero avere.

1

Il tuo file JS si troverà nello stesso dominio della pagina web? In tal caso, utilizzare semplicemente window.location.host nel proprio plug-in per ottenere "http://mydomain".

+0

No, non lo sarà, ospiteremo il file JS e può andare su qualsiasi sito Web utente. – StevieB

+0

Ma lo script verrà distribuito in vari ambienti?(Se non fosse il caso, avresti hardcode il nome del dominio nello script, veloce e sporco ...). –

0

Hai provato a farlo nel tuo file JS?

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; 

}()); 

Avrete sul api_domain vostro valore desiderato.