如何将此Greasemonkey代码转换为Android的JavaScript

How to Convert this Greasemonkey code to JavaScript for Android?

本文关键字:Android JavaScript 转换 代码 Greasemonkey      更新时间:2023-09-26

我正试图加载一个页面,然后在上面运行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)");