Всем привет. Извиняюсь за тупой вопрос, но никак не получается решить его. Нужно из визуал форс страницы отправить get запрос чтобы узнать погоду в текущем городе.. Сервис погоды работает через http, поэтому браузер блокирует смешанный контент. В итоге можно отключить систему безопасности и заработает, но это не выход. Подскажите плиз как это можно обойти!!!
Обойти такое предупреждение врядли получится - это проблема браузера а не VF страницы.
есть два теоретических решения:
1. попробовать ссылку в виде //... (без http спереди)
<img src="//www.domain.com/image.gif" alt="" />
не знаю сработает ли это если сервис не отдает контент по https.
2. можно вытягивать данные в контроллере с помощью callout, парсить и показывать на странице уже как свою собственную информацию.
у меня похожая проблема только с post запросом.
нужно отправить файл и данные из формы на visualforce странице на сторонний сервер.
в случае https://myServer и //myServer вылазит ошибка связанная с ssl сертификатом
<form action="http://myServer" enctype="multipart/form-data" method="post">
<input id="id" name="id" type="hidden" value="...."/>
<input id="accessToken" name="accessToken" type="hidden" value="......."/>
<input id="instanceUrl" name="instanceUrl" type="hidden" value="....."/>
<input type="file" name="file"/>
<input type="submit" value="Upload"/>
</form>
Данные можно отправить POST запросом со стороны Salesforce (серверной части) с помощью APEX HTTP Callouts.
Тогда проблем с сертификатами точно не будет. Просто данные из браузера будут передаваться в контроллер SF, там обрабатываться, валидироваться и уже потом пересылаться в сторонний сервис с помощью POST запроса.
Либо попробовать в браузере, но не с form напрямую, а с помощью AJAX запроса.
я так понимаю с apex контроллером не получится. я пробовал вложить файл с помощью
Blob body=setBodyAsBlob(file);
но там вроде как ограничение 3 MB, а мне нужно 100.
попробую еще, конечно, с помощью ajax.
И еще вопрос: как можно с помощью apex или javascript принять selfsigned сертификат? Буду благодарен за примеры
попробовал такой вариант:
$('#postForm').submit(function(event){
event.preventDefault();
var formData = new FormData($(this)[0]);
$.ajax({
url: 'https://myhost.com',
type: 'POST',
data: formData,
async: false,
cache: false,
contentType: false,
processData: false,
success: function (returndata) {
alert(returndata);
}
});
return false;
});XMLHttpRequest cannot load https://myhost.com. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://c.cs1.visual.force.com' is therefore not allowed access.
Потому что так делать нельзя, это политика браузера.