如何将此Greasemonkey代码转换为Android的JavaScript
How to Convert this Greasemonkey code to JavaScript for Android?
我正试图加载一个页面,然后在上面运行javascript代码,我发现了一个Greasemonkey脚本也能做到这一点,但我在android中实现同样的东西时遇到了问题,可能是因为我对javascript一无所知。
这是Greasemonkey的剧本;它应该提供一个新的链接:
window.addEventListener("load", function ()
{
var link = document.evaluate("//div[@class='dl_startlink']/div/a[contains(@href,'"+window.location.href.match(/'?(.*)$/)[1]+"')]", document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
if( !link.snapshotLength )
return;
location.href = link.snapshotItem(0).href;
}, false);
这就是我想要运行它的方式:
public void onPageFinished (WebView view, String url) {
System.out.println("webview loaded");
webView.loadUrl("javascript:/*...........Javascript code here........*/");
}
关于如何获取链接并将该页面加载到网络视图中,有什么想法吗?编辑:另一个版本也做同样的事情。
var candidates = document.evaluate("//*[@class = 'dl_startlink']/div", document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
if( !candidates.snapshotLength )
return;
//The DIV with the highest zIndex has the *real* link; the rest are useless.
- var maxDiv = candidates.snapshotItem(0);
- for( var i = 1; i < candidates.snapshotLength; i++ )
- if( maxDiv.style.zIndex < candidates.snapshotItem(i).style.zIndex )
- maxDiv = candidates.snapshotItem(i);
- location.href = maxDiv.children[0].href;
好的,这里只有一个简单的Xpath查询,它可以重写为CSS选择器。
此外,我决定更换window.location.href.match(/'?(.*)$/)[1]
。如果我的版本不起作用,请将前2行替换为var query = window.location.href.match(/'?(.*)$/)[1];
。
实际上,也许连var query = window.location.search.replace(/^'?/,'')
都足够了。
window.addEventListener("load", function ()
{
var l = window.location;
var query = l.search ? (l.search.replace(/^'?/,'') + l.hash) : ""
var link = document.querySelector("div.dl_startlink > div > a[href='" + query + "']");
if (!link) return;
l.href = link.href;
}, false);
安卓系统的新代码:
var candidates = document.querySelector("div.dl_startlink > div");
if( !candidates.length)
return;
//The DIV with the highest zIndex has the *real* link; the rest are useless.
var maxDiv = candidates[0];
for( var i = 1; i < candidates.length; i++ )
if( maxDiv.style.zIndex < candidates[i].style.zIndex )
maxDiv = candidates[i];
location.href = maxDiv.children[0].href;
压缩版本:
webView.loadUrl("javascript:window.addEventListener('load',function(){var%20candidates=document.querySelector('div.dl_startlink>div');if(!candidates.length)return;var maxDiv=candidates[0];for(var%20i=1;i<candidates.length;i++)if(maxDiv.style.zIndex<candidates[i].style.zIndex)maxDiv=candidates[i];location.href=maxDiv.children[0].href;},false)");
相关文章:
- 字符串在将其传递给另一个活动Android JavaScript时读取Null
- Android/Javascript:Uncaught TypeError Object[Object]没有方法'
- Android-Javascript:如何在webview中执行jquery
- Cordova Android javascript,用于检查多个复选框值
- Android Javascript Interface
- Android & Javascript - 从两个函数到一个函数
- Android JavaScript vs Java performance
- Android:Javascript使用Angle旋转图像
- Android, Javascript, Rhino, JSON
- Android/ JavaScript - 在URL中传递数据
- 在调用 android javascript 方法时传递 json 对象
- 通过Android javascript接口从HTML传递图像
- iphone, ipad, android javascript print()
- android javascript正则表达式检测
- Android Javascript接口失败
- Android - Javascript in WebView
- Monotouch / Mono for Android Javascript to C#
- Android: Javascript函数在eval()之后不继续
- Android javascript交互-试图上传文件到CGI
- Android Javascript在4.4中不能工作,但在4.0.x中可以工作