- Как правильно получить contextPath из JavaScript?
- How to Get the Contextpath from Javascript, the Right Way
- How do you get the contextPath from JavaScript, the right way?
- How to define request.getContextPath() as baseUrl in RequireJS config?
- get contextpath from javascript
- Fetching a image in server context path from javascript code
- How to get context path in plain HTML?
- Get rid of hard-coding the context path of web apps in external JavaScript files
- How to set context path to a variable in javascript
- JS getting $ Get the root path of the project
- Read More:
Как правильно получить contextPath из JavaScript?
Использование back-end на основе Java (т.е. сервлетов и JSP), если мне нужен contextPath из JavaScript, каков рекомендуемый шаблон для этого, почему? Я могу придумать несколько возможностей. Я что-то не хватает? 1. Запишите тег SCRIPT на страницу, которая устанавливает его в некоторой переменной JavaScript
Это точно, но при загрузке страницы требуется выполнение SCRIPT. 2. Установите contextPath в некоторый скрытый элемент DOM
Это точно и не требует выполнения SCRIPT при загрузке страницы. Но вам нужен запрос DOM, когда вам нужно получить доступ к contextPath. Результат запроса DOM может быть кэширован, если вы заботитесь о производительности. 3. Попытайтесь выяснить это в JavaScript, изучив document.URL или тег BASE
function() < var base = document.getElementsByTagName('base')[0]; if (base && base.href && (base.href.length >0)) < base = base.href; >else < base = document.URL; >return base.substr(0, base.indexOf("/", base.indexOf("/", base.indexOf("//") + 2) + 1)); >;
Это не требует выполнения SCRIPT при загрузке страницы, и вы также можете кэшировать результат, если это необходимо. Но это работает только в том случае, если вы знаете, что ваш контекстный путь — это единственный каталог — в отличие от корневого каталога ( / ) или нескольких каталогов вниз ( /mypath/iscomplicated/ ). В каком направлении я склоняюсь Я предпочитаю скрытый элемент DOM, потому что он не требует выполнения кода JavaScript при загрузке страницы. Только когда мне понадобится contextPath, мне нужно будет что-нибудь выполнить (в этом случае запустите запрос DOM).
Я могу на всю жизнь не понять, почему «но выполнение скрипта при загрузке страницы» является такой большой проблемой, что вы предпочли бы вернуться к возмущению / обходу DOM. Можете ли вы уточнить? Кроме того, для чего конкретно нужен контекстный путь? Возможно, есть и другие способы, чтобы вам это вообще не нужно.
Выполнение JavaScript при загрузке страницы блокирует параллельные загрузки. Может быть, это не имеет значения с одним вкладышем. Обход DOM может быть более наказывающим, но, по крайней мере, у вас есть возможность отложить штраф, пока он вам абсолютно не понадобится (если он вам нужен). Я не уверен, что поиск по идентификатору был бы таким же штрафным.
Мне сам контекст не нужен. Я просто поднимал «что если». Вот возможный пример: я загружаю файл JS динамически и мне нужно знать его путь. Я могу использовать абсолютный путь, если я знаю contextPath заранее, но если contextPath меняется, мои сценарии ломаются. Я могу использовать относительный путь, но это зависит от местоположения родительского документа HTML. Если я перемещаю файл, моя страница разрывается. Зная contextPath, я могу защитить себя от таких поломок, имея динамически генерируемый абсолютный путь.
Присвоение глобальной переменной в современных браузерах практически невозможно. Я бы один использовал не старомодные скриптлеты для этого, а только EL. var ctx = ‘$’;
@BalusC Вы великолепны. Спасибо за постоянную публикацию того, что вы знаете о том, как работать с JSP. Кроме того, я не могу получить ваше предложение работать. Когда я помещаю его в тег сценария, EL не распознается. И когда я не помещаю его в тег скрипта, ошибка говорит о том, что переменная определена неправильно. Как мне сделать то, что вы опубликовали выше?
How to Get the Contextpath from Javascript, the Right Way
How do you get the contextPath from JavaScript, the right way?
Based on the discussion in the comments (particularly from BalusC), it’s probably not worth doing anything more complicated than this:
How to define request.getContextPath() as baseUrl in RequireJS config?
Found the answer using JS on another Stack overflow post:
function getContextPath() return window.location.pathname.substring(0, window.location.pathname.indexOf("/",2));
>
requirejs.config( baseUrl: getContextPath() + '/js/ops/libs',
paths: jquery:'jQuery-2.2.4/jquery-2.2.4.min',
bootstrap:'Bootstrap-3.3.7/js/bootstrap.min',
dataTables: 'datatables.min',
>
>);
get contextpath from javascript
Write this in your page using JSP and refer in js files. It will work.
Make sure you add js file after this code
var contextPath=»;
console.log(contextPath);
onclick="javascript:callTest(contextPath+'/test1/test2/test3.do')" />
or pass url and add it in callTest function
onclick="javascript:callTest('/test1/test2/test3.do')" />
function callTest(pageURL)
var url=contextPath+pageURL;
//contextPath will be available, if defined in JSP
>
Fetching a image in server context path from javascript code
You just have to understand how relative paths work. Even if the path is in a JavaScript file, the path is not relative to the location of this JS file, but it’s relative to the URL of the HTML page being displayed in the browser.
So, if the URL of the page executing this javascript code is
http://foo.bar.com/myWebApp/zim/boom/tchak.html
and the URL of the image is
../images/icons/search_result.png
The absolute URL of the image will be
http://foo.bar.com/myWebApp/zim/boom/../images/icons/search_result.png
http://foo.bar.com/myWebApp/zim/images/icons/search_result.png
An absolute path like /images/icons/search_result.png is also resolved from the root of the web server, and not the root of the webapp (the browser doesn’t know what a Java webapp is and doesn’t care). So it’s resolved as
http://foo.bar.com/images/icons/search_result.png
You would need to prepend the context path to the path to make it really absolute:
/images/icons/search_result.png
$/images/icons/search_result.png
How to get context path in plain HTML?
Not sure if this helps you. Try using a CDN:
src="http://code.jquery.com/jquery-3.3.1.min.js"
integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8 anonymous">
It’s faster, secure and doesn’t need to be downloaded too. Also, you can use relative paths from the domain name, say:
src="https://www.itcodar.com/assets/external/jquery-3.3.1.min.js">
The above works if you know where exactly the script resides.
Get rid of hard-coding the context path of web apps in external JavaScript files
What happens is that the included JavaScript file named websockets.js where the global variable contextPath is attempted to be accessed, is placed before the hard-coded tag in the generated HTML tag in the master template
This is unexpected. You declared the referring websockets.js file inside with target=»head» . This is supposed to end up after all other script resources already declared in . See also a.o. How to reference CSS / JS / image resource in Facelets template? After all, this appears to be caused by PrimeFaces bundled HeadRenderer which is intented to auto-include some CSS resources and take care of the .
This is worth an issue report to PF guys (if not already done). In the meanwhile, your best bet is to turn off it by explicitly registering the JSF implementation’s own HeadRenderer back as below in faces-config.xml (provided that you’re using Mojarra).
javax.faces.Output javax.faces.Head com.sun.faces.renderkit.html_basic.HeadRenderer
And explicitly include the PrimeFaces theme-specific theme.css as below in :
Coming back to the real question,
Anyway, how to get rid of hard-coding the context path in external JavaScript files?
Either set it as base URI (note: relative path isn’t supported in HTML4 / IE6-8).
var baseURI = $("base").attr("href");
Or set it as data attribute of HTML root element.
var baseURI = $("html").data("baseuri");
Unrelated to the concrete problem, as a word of advice, to transparently cover both http+ws and https+wss, consider using location.protocol instead of a hardcoded wss .
var ws = new WebSocket(location.protocol.replace("http", "ws") + "//" + location.host + baseURI + "Push");
How to set context path to a variable in javascript
for setting context path in a jsp page.And contextPath should be a global javascript variable.
JS getting $ Get the root path of the project
As we know, direct access to the JSP EL expression in js is unable to obtain, if you want to get $ value, we can use the following two ways:
1, in the $ with single quotes, this is the most simple way
2. Create a form with type= “hidden”, for example:
Then get the value of the form through the JS action:
//Get the project root path var rootUrl = ""; $(function () < rootUrl = $("#rootUrl").val(); >)
Read More:
- Solution to build error in Vue project (error in static/JS)/vendor.xxxxx.js from UglifyJs)
- [Solved] node.js request Error: Error: unable to verify the first certificate
- Trigger http request when tab page is closed in angular2+ project
- request.js?b775:101 Uncaught (in promise) Error: Failed to convert value of type ‘java.lang.String’ to required type ‘java.lang.Long’;
- [Solved] Nuxt Import qrcodejs2.js / QRCode.js Error: document is not defined
- Solution to some map files in JS folder after Vue packaging (remove the map. JS file)
- The solution to the failure of HTML introducing external JS
- Vue Project Error: Proxy error: Could not proxy request [How to Solve]
- [Solved] webpack Package Error: ERROR in multi ./src/main.js ./dist/bundle.js Module not found: Error: Can‘t resolv
- If the request parameter is formdata, use the Ajax operation
- [Solved] node.js Upload Files Error: Multipart: boundary not found multer
- [vue/no-multiple-template-root] The template root requires exactly one element.
- Interface request error 504 gateway time out [How to Solve]
- Vue3 Error: [vue/no-multiple-template-root] The template root requires exactly one element
- [Solution] VUE.js Load a local image with parameters in the script
- JS bug Log Uncaught TypeError: Cannot read property ‘previoustSibling‘ of null
- Please transfer a valid prop path to form item
- [Solved] Element form method resetfields() error: vue.runtime.esm.js?2b0e:1888 TypeError: Cannot read properties of undefined (reading ‘indexOf’)
- Difference between contenttype and datatype in Ajax request of jquery
- [Vue error] the solution to the template root requires exactly one element error reporting