class ContentLoader {
@JavascriptInterface
public void load(String body) {
// do something
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView webView = createWebView();
webView.loadUrl("https://www.somedoamin.com/product.jsp");
// enable javascript
webView.getSettings().setJavaScriptEnabled(true);
// add interface
webView.addJavascriptInterface(new ContentLoader(), "ContentLoader");
webView.setWebViewClient(new WebViewClient() {
int action;
@Override
public void onPageFinished(WebView view, String url) {
switch (action) {
case 0:
// fill field and submit
view.loadUrl("javascript:{\n" +
"\tdocument.querySelector('input[name=cgi_tel_no]').value='12345678';\n" +
"\tdocument.querySelector('input[name=cgi_id_no]').value='abcdef';\n" +
"\tsubmitMyForm();\n" +
"};");
case 1:
// get content from 'ContentLoader' interface
view.loadUrl("javascript:{\n" +
"\twindow.ContentLoader.load('<body>'+document.body.innerHTML+'</body>');\t\n" +
"};");
break;
}
action++;
}
});
}
WebView createWebView() {
WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
WindowManager.LayoutParams params = new WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, PixelFormat.TRANSLUCENT);
params.gravity = Gravity.TOP | Gravity.LEFT;
params.x = 0;
params.y = 0;
params.width = 0;
params.height = 0;
LinearLayout layout = new LinearLayout(this);
layout.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT));
WebView view = new WebView(this);
view.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
layout.addView(view);
windowManager.addView(layout, params);
return view;
}
2016/03/15
Operate form in WebView and get content
2016/03/06
Gitlab
安裝
線上安裝,支援的 OS 有 Ubuntu、Debian、CentOS、Raspberry PI 2 on Raspbian。直接依照說明即可完成。
建議安裝時也同時下載目前安裝的版本,避免之後有移轉問題需要還原。各版本下載位址為
備份
# 執行備份 gitlab-rake gitlab:backup:create
還原
# 複製備份檔至備份路徑 sudo cp 1493107454_2017_04_25_9.1.0_gitlab_backup.tar /var/opt/gitlab/backups/ # 停止服務 sudo gitlab-ctl stop unicorn sudo gitlab-ctl stop sidekiq # 開始還原 sudo gitlab-rake gitlab:backup:restore BACKUP=1493107454_2017_04_25_9.1.0 # 啟動系統 sudo gitlab-ctl start # 檢查還原結果 sudo gitlab-rake gitlab:check SANITIZE=true
由 SVN 移轉
建立 svn 與 git 作者的 mapping 檔(author.txt)
nanashi07 = Bruce <nanashi07@haha.com>
由 svn 簽出為 git 專案
# clone from svn # with standard layout(trunk/branches/tags), "-s" argument is required # "author.txt" contains a list that svn accounts mapping to git authors git svn clone https://10.10.10.162/svn/caml/Caml.Maker --authors-file=author.txt --no-metadata -s Caml.Maker cd Caml.Maker # convert tags git for-each-ref refs/remotes/tags | cut -d / -f 4- | grep -v @ | while read tagname; do git tag "$tagname" "tags/$tagname"; git branch -r -d "tags/$tagname"; done # convert branches git for-each-ref refs/remotes | cut -d / -f 3- | grep -v @ | while read branchname; do git branch "$branchname" "refs/remotes/$branchname"; git branch -r -d "$branchname"; done # add remote repository git remote add origin http://nanashi07:password@10.10.10.222/caml/Caml.Maker.git # push to remote git push origin --all cd ..
升級
# 停止服務 sudo gitlab-ctl stop unicorn sudo gitlab-ctl stop sidekiq sudo gitlab-ctl stop nginx # 備份 sudo gitlab-rake gitlab:backup:create # 安裝下載的檔案 # Ubuntu/Debian: sudo dpkg -i gitlab_x.x.x-omnibus.xxx.deb # CentOS: sudo rpm -Uvh gitlab-x.x.x_xxx.rpm # 重新設定與啟動 sudo gitlab-ctl reconfigure sudo gitlab-ctl restart