iOSに基づいてJavaScriptとの対話を実現する.
3789 ワード
先日、WebKitに基づくプロキシブラウザを開発しました.ウェブページを閲覧する機能を実現したほか、Socksプロキシ機能(主にフリー流量、流量転送、悪意のあるURL検出などを実現します.)を追加しました.iOSは一つのインターフェースだけを提供して、JavaScriptとインタラクションします.
UCブラウザーをテストする時、夜間、昼間モードを変えてべつにページを更新していません(つまり、バックグランドは夜間、昼間の2つの異なっている様式のを用意していません)を発見して、クライアントの研究開発者だけはstrigByEveraluding JavaScript FroomString:改正を通してページのcssを更新していません.js、cssとpictureを含めて、設定画面で見られますが、完全にキャッシュされています.ページは一般的に3 MBの空間が必要です.だから、夜間/昼モードを変更する際には、ネットワークを再要求する必要はなく、良いユーザー体験効果が得られます.
しかし、他のブラウザなどに対しては、画面の明るさを調整するだけで、開発者のレベルから実力が現れるということです.
ブラウザを開発する時、夜間/昼モードについてもいろいろ工夫しました.方法は重いですが、大量の遍歴は携帯のメモリに一定の消耗があるかもしれません.テスト後、効率はまあまあです.
- (nullable NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script
はい、以下の例では、JavaScriptにおいて、コントロールの中にNameがある場合、このコントロールを取得するコードは以下の通りです.document.getElementByTagName("controlName")
さて、iOSでは、strigByEveraluating JavaScript FroomStringを使用します.[self.webView stringBYEvaluatingJavaScriptFromString:
@"var control = document.getElementsByTagName("controlName");
control.style.background = '#080A3B';
"
]
それと同じように、htmlページの画像を全部修正したい場合、以下の方法を使ってもいいです.前提は)ページに怠け者用のローディングがないことです.[self.webView stringByEvaluatingJavaScriptFromString:
@"var i, a;"
"for(i = 0; (a = document.getElementsByTagName('img')[i]); i ++) {"
"a.src = 'picture.png';" //
"}"
]
いくつかのよく使われている代用語を列挙して、現在のtitleを取得します.NSString *title = [self.webView stringByEvaluatingJavaScriptFromString:@"document.title"]
ページのdyを取得しますNSString *bodyStr = [self.webView stringByEvaluatingJavaScriptFromString:@"document.inner.body"]
現在のページのURLを取得します.NSString *urlStr = [self.webView stringByEvaluatingJavaScriptFromString:@"document.location.href"] // url
界面要素の値を変更document.getElementsByName('controlName')[0].value = 'other value'
フォームを送信document.forms[0].submit()
jsコードをhemlページに挿入する場合、方法は以下の通りです.[self.webView stringByEvaluatingJavaScriptFromString:
@"var script = document.createElement('aScript');"
"script.type = 'text/javascript';"
"script.text = \function newFunction() {"
"var temp = document.getElementsByName('controlName')[0]; "
"temp.value = 'Visitor';"
"document.forms[0].submit();"
"} \";"
"document.getElementsByTagName(head)[0].appendChild(script);"
];
[self.webView stringByEvaluatingJavaScriptFromString:@"newFunction();"];
一般的に、ブラウザには夜間/昼モード機能があります.UC、QQなどのブラウザの夜間/昼モードが完全に修正されました.UCブラウザーをテストする時、夜間、昼間モードを変えてべつにページを更新していません(つまり、バックグランドは夜間、昼間の2つの異なっている様式のを用意していません)を発見して、クライアントの研究開発者だけはstrigByEveraluding JavaScript FroomString:改正を通してページのcssを更新していません.js、cssとpictureを含めて、設定画面で見られますが、完全にキャッシュされています.ページは一般的に3 MBの空間が必要です.だから、夜間/昼モードを変更する際には、ネットワークを再要求する必要はなく、良いユーザー体験効果が得られます.
しかし、他のブラウザなどに対しては、画面の明るさを調整するだけで、開発者のレベルから実力が現れるということです.
ブラウザを開発する時、夜間/昼モードについてもいろいろ工夫しました.方法は重いですが、大量の遍歴は携帯のメモリに一定の消耗があるかもしれません.テスト後、効率はまあまあです.
- (void)setNightMode:(UIWebView *)webView {
[webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName('body')[0].style.webkitTextFillColor= '#2D99BC'"];
NSString *javaScriptPath = [[NSBundle mainBundle] pathForResource:@"JavaScript" ofType:@"plist"];
NSDictionary *javaDict = [NSDictionary dictionaryWithContentsOfFile:javaScriptPath];
NSArray *array = javaDict[@"controls"];
for(NSString *control in array) {
[webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"var i, a;"
"for(i = 0; (a = document.getElementsByTagName('%@')[i]); i ++) {"
"a.style.background = '#080A3B';"
"}", control]];
}
}
上のコードとplistファイルは私のGitHubでダウンロードできます. ,