반응형

토스가 꿈꾸는 React Native 기술의 미래

https://toss.tech/article/react-native-2024

 

토스가 꿈꾸는 React Native 기술의 미래

토스 프론트엔드 챕터는 어떻게 React Native 기술을 발전시켜 나갈 예정일까요?

toss.tech

 

https://youtu.be/6H9WQDRFZYg

 

반응형
반응형

안드로이드 : 웹뷰 404 에러처리

WebView.setWebViewClient(new WebViewClient() {
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
}

@Override
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);

switch (errorCode) {
case ERROR_AUTHENTICATION: // 서버에서 사용자 인증 실패
case ERROR_BAD_URL: // 잘못된 URL
case ERROR_CONNECT: // 서버로 연결 실패
case ERROR_FAILED_SSL_HANDSHAKE: // SSL handshake 수행 실패
case ERROR_FILE: // 일반 파일 오류
case ERROR_FILE_NOT_FOUND: // 파일을 찾을 수 없습니다
case ERROR_HOST_LOOKUP: // 서버 또는 프록시 호스트 이름 조회 실패
case ERROR_IO: // 서버에서 읽거나 서버로 쓰기 실패
case ERROR_PROXY_AUTHENTICATION: // 프록시에서 사용자 인증 실패
case ERROR_REDIRECT_LOOP: // 너무 많은 리디렉션
case ERROR_TIMEOUT: // 연결 시간 초과
case ERROR_TOO_MANY_REQUESTS: // 페이지 로드중 너무 많은 요청 발생
case ERROR_UNKNOWN: // 일반 오류
case ERROR_UNSUPPORTED_AUTH_SCHEME: // 지원되지 않는 인증 체계
case ERROR_UNSUPPORTED_SCHEME:
WebView.loadUrl("about:blank"); // 빈페이지 출력
AlertDialog.Builder builder = new AlertDialog.Builder(MyView.this);
builder.setPositiveButton("확인", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {

// 확인버튼 클릭시 이벤트

}});
builder.setMessage("네트워크 상태가 원활하지 않습니다. 어플을 종료합니다.");
// builder.setMessage("네트워크 상태가 원활하지 않습니다. 페이지를 이동합니다.");
builder.setCancelable(false); // 뒤로가기 버튼 차단
builder.show(); // 다이얼로그실행
break;
}}});
반응형
반응형

하이브리드앱, 웹뷰(WebView) 설정하기 - 안드로이드

안드로이드 스튜디오 설치하고.  https://developer.android.com/studio/

AndroidManifest.xml

// 인터넷 사용할꺼야 라고 선언
<uses-permission android:name="android.permission.INTERNET" />

layout.xml 

//웹뷰 등록 html로 비교하면 iframe 과 비슷하겠네요.
<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent"></WebView>

Java

private WebView mWebView; //웹뷰
private WebSettings mWebSettings; //웹뷰세팅

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

     // 웹뷰 세팅
     mWebView = (WebView)findViewById(R.id.webview); //레이어와 연결
     mWebView .setWebViewClient(new WebViewClient()); // 클릭시 새창 안뜨게
     mWebSettings = mWebView.getSettings(); //세부 세팅 등록
     mWebSettings.setJavaScriptEnabled(true); // 자바스크립트 사용 허용

     mWebView.loadUrl("http://m.nate.com"); //원하는 URL  입력
}

 


웹뷰 기본 옵션
mWebView.goBack(); //뒤로가기
mWebView.goForward(); //앞으로가기
mWebView.reload(); //새로고침

mWebView.clearCache(true); // 캐시 지우기
mWebView.reload(); // 현재 웹뷰 새로고침
mWebView.stopLoading(); // 로딩 중단

//스크롤 없애기
mWebView.setVerticalScrollBarEnabled(false);
mWebView.setHorizontalScrollBarEnabled(false);


웹뷰 세부 옵션

wvs = mWebView.getSettings();

wvs .setWebViewClient(new WebViewClient()); // 클릭시 새창 안뜨게
wvs .setJavaScriptEnabled(true); //자바스크립트 사용

wvs .setWebChromeClient(new webViewChrome()); // alert 경고창 사용

//화면 비율 관련 - 안드로이드 TV셋탑에서 웹뷰 사용할때 웹페이지 viewport가 적용안되서.
wvs .setUseWideViewPort(true); //wide viewport를 사용하도록 설정
wvs.setLoadWithOverviewMode(true); // 컨텐츠가 웹뷰보다 클 경우 스크린 크기에 맞게 조정
wvs.setInitialScale(35); //비율 조절
wvs.setDefaultFontSize(8); // 기본 폰트 사이즈 지정
wvs.setMinimumFontSize(8); //폰트 사이즈 지정

//웹뷰 멀티 터치 가능하게 (줌기능)
wvs .getSettings().setBuiltInZoomControls(true); //줌 아이콘 사용 설정
wvs .getSettings().setSupportZoom(false);

wvs .setPluginState(WebSettings.PluginState.ON_DEMAND); // 플러그인을 사용 설정
wvs .setCacheMode(WebSettings.LOAD_NO_CACHE); // 웹뷰가 캐시를 사용하지 않도록 설정

wvs .setDefaultZoom(WebSettings.ZoomDensity.FAR); // 페이지 크기 자동 조절?

뒤로 가기 버튼
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
        mWebView.goBack();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}


webViewExampleSettings.setSaveFormData(true);  입력된 데이터 저장 여부
webViewExampleSettings.setSavePassword(true);  입력된 비밀번호 저장 여부

 

반응형
반응형

https://github.com/driftyco/cordova-plugin-wkwebview-engine#installation-instructions


코르도바 WKWebView 엔진

이 플러그인은 Apache Cordova WKWebView 플러그인의 확장 입니다. 여기에는 몇 가지 DOM 예외 문제와 함께 XHR 요청을 둘러싼 일부 문제를 해결하기위한 개선 사항이 포함되어 있습니다. Ionic은 Cordova 팀과 협력하여 업데이트를 공식 Cordova 플러그인에 병합하는 최종 목표로 이러한 변경 사항을 완전히 테스트합니다. 베타 테스트 기간이 끝나면 WKWebView 플러그인을 Ionic 기본값으로 설정하여 모든 사용자가 UIWebView에 비해이 플러그인의 향상된 성능을 쉽게 이용할 수있게하는 것이 중요합니다.

이 플러그인은 iOS 9 이상 만 지원하며 iOS 8의 UIWebView로 대체됩니다.

WKWebView 플러그인은 iOS에서만 사용되므로 cordova-ios플랫폼이 설치 되어 있는지 확인하십시오 또한 cordova-ios플랫폼 버전이 같 4.0거나 커야합니다.

설치 지침

최신 Cordova CLI가 설치되어 있는지 확인하십시오 (Sudo가 필요할 수도 있음).

npm install cordova -g

ios플랫폼이 추가 되었는지 확인하십시오 .

ionic platform ls

iOS 플랫폼이 목록에 없으면 다음 명령을 실행하십시오.

ionic platform add ios

iOS 플랫폼이 설치되었지만 버전이 < 4.x인 경우 다음 명령을 실행하십시오.

ionic platform update ios
ionic plugin save           # creates backup of existing plugins
rm -rf ./plugins            # delete plugins directory
ionic prepare               # re-install plugins compatible with cordova-ios 4.x

WKWebViewPlugin 설치 :

ionic plugin add https://github.com/driftyco/cordova-plugin-wkwebview-engine.git --save

노트 :

이미 아파치 / cordova-plugin-wkwebview-engine을 설치 했다면 이 버전을 사용하기 전에 제거해야합니다.

ionic plugin rm cordova-plugin-wkwebview-engine

플랫폼 구축 :

ionic prepare

iOS 9 또는 10 기기에서 앱 테스트 :

ionic run ios

iOS에 WKWebView가 설치되었는지 확인하는 쉬운 방법은 window.indexedDB존재하는지 확인하는 것입니다. 예 :

if (window.indexedDB) {
   console.log("I'm in WKWebView!");
} else {
   console.log("I'm in UIWebView");
}

필요한 사용 권한

config.xml에 다음 내용이 포함되어 있지 않으면 WKWebView가 완전히 실행되지 않을 수 있습니다 (deviceready 이벤트가 실행되지 않을 수 있음).

config.xml

<allow-navigation href="http://localhost:8080/*"/>
<feature name="CDVWKWebViewEngine">
  <param name="ios-package" value="CDVWKWebViewEngine" />
</feature>

<preference name="CordovaWebViewEngine" value="CDVWKWebViewEngine" />


반응형
반응형

Native Vs Hybrid Vs HTML5 Mobile Apps

 - http://www.pixelcrayons.com/blog/mobile/native-vs-hybrid-vs-html5-mobile-apps-which-one-is-best-for-your-business/


2017 - http://noeticforce.com/best-hybrid-mobile-app-ui-frameworks-html5-js-css

 

2016 - http://blogs.perceptionsystem.com/15-mobile-app-development-frameworks/


PhoneGap http://www.pixelcrayons.com/blog/mobile-applications/how-phonegap-app-development-service-helps-your-business/


http://phonegap.com/ 






.

반응형
반응형

안드로이드에서 webview가 fragment 로 만들어졌을 경우 웹페이지에서 <select> 태그가 작동하지 않을때가 있다.

액티비티로 만들면 바로 작동이 되지만 일부 디바이스에서 작동이 안될때가 있어서. 속터진다. ㅋㅋ

 

인터넷 검색하면 여러 답변이 있는데, 우리가 필요로 하는 건 없었다.

 

어플에서 수정이 필요하다.

 

 

==================================================================================

 

WebView into a Fragment (android.support.v4)

 

http://stackoverflow.com/questions/9279632/webview-into-a-fragment-android-support-v4

 

==================================================================================

 

[android] 2.2에서 fragment 사용하기

 

fragment 에 대한 설명 : http://androidhuman.tistory.com/469

예제 소스는 http://daddycat.blogspot.com/2011/08/android-30-fragments-example.html 에서 가져와서 약간 수정했음.

허니컴 이하에서 사용할 때 주의할 점 : http://www.androidpub.com/1432908

 

==================================================================================

 

Select dropdown in Android webview

 

The select tag just doesn’t work sometimes in Android, especially in an app using webview. This drove me nuts for a long long time. The main fix I found, even if your select is buried deep in divs and rows and what ever, is this css:


select {
  visibility: visible;
  -webkit-appearance: menulist-text;
}


 

The -webkit-appearance might be the only one actually needed and setting it to ‘listbox’ works too.

반응형
반응형

phonegap에서 webview가 위아래로 움직이는걸 멈추고 싶을때.
화면이 위아래나 좌우로 흔들리는걸 막을때.

~delegate.m


[[
webView.subviews objectAtIndex:0] setScrollEnabled:NO]; //to stop scrolling completely
[[webView.subviews objectAtIndex:0] setBounces:NO]; //to stop bouncing

------
document.onload = function(){
    document.ontouchmove = function(e){ e.preventDefault(); }
};


반응형

+ Recent posts