구글 크롬으로 커스텀 URL 스킴을 오픈할 수 있습니까?
맥 OS X에 등록된 서드파티 앱으로 스킴을 관리하는 프로토콜(http와 같은)이 있습니다. 즉, x-someapp://some action 등입니다.
구글 크롬으로 이 URL을 열려면 어떻게 해야 합니까?기본적으로 Chrome은 Google 엔진에서 검색을 시작합니다. 대신 App을 실행하고 URL 처리를 전달합니다.
Safari가 일부 등록된 앱을 실행합니다.그리고 옳은 일입니다.
Firefox 및 Opera에서 수행할 작업을 묻습니다...앱을 실행할 수도 있습니다.
하지만 크롬은...묻지 않습니다.
XHtpRequest를 보내기 위해 자바스크립트가 포함된 HTML 페이지를 작성하려고 하기도 했습니다.
function _httpExecuteCallback()
{
if (httpRequestCallbackFunction != null) {
if (httpRequest.readyState == 4) {
if (httpRequest.status == 200) {
httpRequestCallbackFunction();
httpRequestCallbackFunction = null;
}
}
}
}
function _httpGet(url, callbackFunction)
{
httpRequest = false;
httpRequestCallbackFunction = callbackFunction;
httpRequest = new XMLHttpRequest();
httpRequest.onreadystatechange = _httpExecuteCallback;
httpRequest.open('GET', url, true);
httpRequest.send(null);
}
_httpGet('x-someapp://test',function(){})
결과도 없습니다...
현재 승인된 솔루션은 SSL https용 Chrome에 문제가 있습니다.Chrome은 콘솔 로그를 보면서 사용자 지정 url 프로토콜이 안전하지 않다고 생각하여 요청을 차단합니다.
[blocked] The page at reports blah blah ran insecure content from customproto//blah blah
다음은 해결책입니다(조사하는 데 며칠이 걸렸습니다).
<input type='button' value='Test Custom Url' onclick='exec()'>
<script>
function submitRequest(buttonId) {
var d = (window.parent)?window.parent.document:window.document
if (d.getElementById(buttonId) == null || d.getElementById(buttonId) == undefined) return;
if (d.getElementById(buttonId).dispatchEvent) {
var e = d.createEvent("MouseEvents");
e.initEvent("click", true, true);
d.getElementById(buttonId).dispatchEvent(e);
}
else {
d.getElementById(buttonId).click();
}
}
function exec(){
var d = (window.parent)?window.parent.document:window.document
var f = d.getElementById('customUrlLink')
if (f ) {f.parentNode.removeChild(f);}
var a = d.createElement('a');
a.href = 'mycustomproto://arg1';
a.innerHTML = "Link"
a.setAttribute('id', 'customUrlLink');
a.setAttribute("style", "display:none; ");
d.body.appendChild(a);
submitRequest("customUrlLink");
}
</script>
IE에서는 이 코드가 작동하지 않습니다.이 기법을 사용하면 IE가 사용자 지정 프로토콜의 인수를 1000자 미만으로 제한하고 iFrame 기법을 사용하면 2083자를 허용한다는 것을 알게 되었습니다.
자바스크립트에서 URL 제한을 극복할 수 있는 유일한 방법은 데이터를 척하고 여러 번 호출하는 것입니다.만약 누군가 그것을 시도하고 싶다면, 어떻게 되는지 알려주세요.그것을 사용하고 싶습니다.
실행 앱에서 긴 URL을 처리하려면 토큰을 앱에 전달하고 URL GET에서 데이터를 가져오도록 합니다.
그래서 지금은 Chrome/FF에 하나의 기능을 사용하고 IE에 다른 기능을 사용하고 있습니다.
이러한 링크를 통해 이 솔루션을 개발할 수 있었습니다.
https://superuser.com/questions/655405/custom-protocol-handler-not-working-in-chrome-on-ssl-page
링크에서 jQuery/JavaScript 클릭 시뮬레이션
(이 사실을 며칠 전에 알았더라면..)이것이 누군가에게 도움이 되길 바랍니다.
==================================================
업데이트: (8시간 후)
==================================================
Jake는 크롬에 대한 훌륭한 솔루션을 게시했습니다: https://superuser.com/questions/655405/custom-protocol-handler-not-working-in-chrome-on-ssl-page
크롬에서만 작동합니다.
window.location.assign("customprotocol://");
iframe에서는 실패하므로 작동합니다.
var w = (window.parent)?window.parent:window
w.location.assign(service + '://' + data)
==================================================
업데이트: (몇 주 후)
==================================================
사용자 정의 프로토콜을 여는 모든 예는 나의 것을 포함하여 url에 "://"이 있습니다.그리고 이것이 SSL 경고의 원인입니다.
해결책은 "://"를 ":"로 바꾸는 것입니다.
따라서 이렇게 하십시오.
src="x-myproto:query" .....
SSL 경고는 사라질 겁니다
==================================================
팔로우: (수개월간 생산 사용 후)
==================================================
이것은 chorme에게 잘 들어왔습니다.브라우저를 감지하고 크롬을 사용할 경우 다음 작업을 수행합니다.
var w = (window.parent)?window.parent:window
w.location.assign('myproto://xyzabcdefetc')
IE와 다른 브라우저의 경우 저는 약간 다른 일을 합니다.
브라우저는 사용자 정의 URL 프로토콜에 넣을 수 있는 데이터의 양에 제한을 가합니다.문자열이 800자 이하이면 모든 브라우저에서 사용할 수 있는 매직 넘버인 것 같습니다.
구글의 위치바 파싱이 방해가 되고 있는 것 같습니다.
그러나 브라우저는 사용자 정의 URL 스킴을 제대로 처리하는 것 같습니다.위치 표시줄에서 사용해 보십시오.
javascript:document.location = 'myscheme://whatever'
사용자 지정 구성표를 사용하는 페이지의 모든 링크도 올바른 작업을 수행해야 합니다.
크롬과 연동되는 솔루션을 찾았습니다.IFRAME 방식을 사용합니다.
예제(JQuery 포함):
$("body").append('<span id="__protoProxy"></span>');
function queryWord(aWord)
{
var protoProxy = document.getElementById('__protoProxy');
if (protoProxy)
{
var word = aWord.replace('"','\"');
protoProxy.innerHTML = '<div style="display:none;"><iframe src="x-myproto://query?' + word + '"></iframe></div>';
}
}
queryWord('hello');
사용자가 앱을 가지고 있지 않을 경우 앱스토어/플레이스토어로 리디렉션하는 기능도 포함된 솔루션입니다.이를 위해 setTimeout을 사용합니다.또한 아이프레임을 사용하여 더 많은 브라우저를 지원합니다.그래서 이것은 Chrome과 다른 모든 모바일 브라우저에서 작동합니다.우리는 이것을 나의 회사로 사용합니다, 브랜치.당신의 URI와 App Store 링크에 맞게 아래 두 링크만 수정하면 됩니다.
<!DOCTYPE html>
<html>
<body>
<script type="text/javascript">
window.onload = function() {
// Deep link to your app goes here
document.getElementById("l").src = "my_app://somepath";
setTimeout(function() {
// Link to the App Store should go here -- only fires if deep link fails
window.location = "https://itunes.apple.com/us/app/myapp/id123456789?ls=1&mt=8";
}, 500);
};
</script>
<iframe id="l" width="1" height="1" style="visibility:hidden"></iframe>
</body>
</html>
iframe 덕분에 어느 브라우저에서나 작동할 수 있습니다.
Chrome이 URL 스킴을 인식하지 못하면 기본적으로 검색으로 전환됩니다.
이것이 제가 Safari에서 보는 것입니다: alt text http://img62.imageshack.us/img62/6792/clipboard02oh.jpg
Firefox에서 다음을 수행할 수 있습니다.
alt text http://img138.imageshack.us/img138/9986/clipboard04xk.jpg
크롬이 검색을 기본으로 하는 이유는 콜론을 사용하는 특별한 구글 검색이 있기 때문이라고 생각합니다.
예:
- 정의: 사전
- 파일 형식:pdf 구글 크롬
이것은 Firefox에 대한 불편함 중 하나입니다. 이러한 유형의 검색을 실행하려면 주소 표시줄이 아닌 "검색 상자"로 이동해야 합니다.Chrome에는 Firefox와 IE 및 Safari처럼 별도의 검색창이 없기 때문에 이 기능이 필요합니다.
아약스의 요청으로는 해결할 수 없습니다.
몇 주 후에..
처럼 보인다window.location.replace('myscheme://whatever')모든 크로스컨트리를 지원하며 크롬, 크롬, 크롬, 크롬, 엣지, 엣지 등과 함께 작동합니다. https://developer.mozilla.org/en-US/docs/Web/API/Location/replace 참조
언급URL : https://stackoverflow.com/questions/2330545/is-it-possible-to-open-custom-url-scheme-with-google-chrome
'programing' 카테고리의 다른 글
| ASP를 사용하여 브라우저에 PDF를 반환합니다.NET 코어 (0) | 2023.09.14 |
|---|---|
| 워드 프레스 - 사용자 지정 게시물 유형에서 하위 메뉴 제거 (0) | 2023.09.14 |
| Excel 관리도 x축에서 날짜-시계열을 허용하지 않음 (0) | 2023.09.14 |
| null 가능한 int 직렬화 (0) | 2023.09.14 |
| Ubuntu의 Oracle XE에서 새 데이터베이스 생성 (0) | 2023.09.14 |