小编Joh*_*sma的帖子

WebView方法对同一线程错误

我有一个android程序(webview中的Java + html).我可以从javascript调用Java代码.但另一种方式停止工作(在eclipse中更新后).

所以这就是我想要做的

  • 制作一个webview(工作)
  • 在javascript中调用AndroidFunction.test(); (工作)
  • java test()函数调用webView.loadUrl("javascript:helloBack()"); (!不再工作了)

我试图让它在MainActivity中使用WebView,但它没有用.

MainActivity.java

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        final WebView webView = (WebView)findViewById(R.id.webView);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.setWebChromeClient(new WebChromeClient());
        WebSettings webSettings = webView.getSettings();
        webSettings.setJavaScriptEnabled(true);

        javascr = new Javascript(this, webView);
        webView.addJavascriptInterface(javascr, "AndroidFunction");
        webView.loadUrl("file:///android_asset/www/index.html");

        ....
}
Run Code Online (Sandbox Code Playgroud)

Javascript.java

public class Javascript {   
    Context cont;
    WebView webView;

    Javascript(Context c, WebView w) {
        cont = c;
        webView = w;
    }

    // function called in the javascript by AndroidFunction.test();
    public void test() {
          // Breaking point!!!
        webView.loadUrl("javascript:helloBack()");
    } …
Run Code Online (Sandbox Code Playgroud)

javascript android android-webview

78
推荐指数
3
解决办法
4万
查看次数

Vuejs和Vue.set(),更新数组

我是Vuejs的新手.做了些什么,但我不知道这是简单/正确的方式.

我想要的是

我想在数组中有一些日期并在事件上更新它们.首先我尝试了Vue.set,但它没有成功.现在更改我的数组项后:

this.items[index] = val;
this.items.push();
Run Code Online (Sandbox Code Playgroud)

我推送()没有任何数组,它会更新..但有时最后一项将被隐藏,不知何故......我认为这个解决方案有点hacky,我怎么能让它稳定?

简单的代码在这里:

new Vue({
  el: '#app',
  data: {
  	f: 'DD-MM-YYYY',
    items: [
      "10-03-2017",
      "12-03-2017"
    ]
  },
  methods: {
    
    cha: function(index, item, what, count) {
    	console.log(item + " index > " + index);
      val = moment(this.items[index], this.f).add(count, what).format(this.f);
  		this.items[index] = val;
      this.items.push();
      console.log("arr length:  " + this.items.length);
    }
  }
})
Run Code Online (Sandbox Code Playgroud)
ul {
  list-style-type: none;
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/1.0.11/vue.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.6/moment.min.js"></script>
<div id="app">
  <ul>
    <li v-for="(index, item) in items">
    <br><br>
      <button v-on:click="cha(index, item, 'day', -1)">
      - …
Run Code Online (Sandbox Code Playgroud)

javascript momentjs vue.js vuejs2

65
推荐指数
3
解决办法
10万
查看次数

Puppeteer,保存网页和图片

我正在尝试保存一个网页,以供 Nodejs 和 puppeteer 离线使用。我看到很多例子:

await page.screenshot({path: 'example.png'});
Run Code Online (Sandbox Code Playgroud)

但是对于更大的网页,这不是一种选择。因此,在 puppeteer 中更好的选择是加载页面,然后像这样保存:

const html = await page.content();
// ... write to file
Run Code Online (Sandbox Code Playgroud)

好的,那行得通。现在我要像推特一样滚动页面。所以我决定屏蔽 puppeteer 页面中的所有图片:

page.on('request', request => {
    if (request.resourceType() === 'image') {
        const imgUrl = request.url()
        download(imgUrl, 'download').then((output) => {
            images.push({url: output.url, filename: output.filename})
        }).catch((err) => {
            console.log(err)
        })
        request.abort()
    } else {
        request.continue()
    }
})
Run Code Online (Sandbox Code Playgroud)

好的,我现在使用“npm 下载”库来下载所有图像。是的,下载图像没问题:D。

现在,当我保存内容时,我想将其指向源中的离线图像。

const html = await page.content();
Run Code Online (Sandbox Code Playgroud)

但现在我喜欢替换所有的

<img src="/pic.png?id=123"> 
<img src="https://twitter.com/pics/1.png">
Run Code Online (Sandbox Code Playgroud)

还有这样的事情:

<div style="background-image: url('this_also.gif')></div>
Run Code Online (Sandbox Code Playgroud)

那么有没有办法(在 puppeteer 中)抓取一个大页面并离线存储整个内容?

Javascript 和 CSS …

html javascript node.js web-scraping puppeteer

7
推荐指数
1
解决办法
1万
查看次数

html5,从组中的对象拖放

更新工作小提琴

原始问题

我想知道为什么我无法从此代码中的圆圈中获取"dragstart"消息...

拖动它时,我不能得到"圈子"的消息.我尝试了一些来自http://www.html5canvastutorials.com的工作代码.在这段代码中:http://www.html5canvastutorials.com/labs/html5-canvas-drag-and-drop-resize-and-invert-images/,它正在运行.

jsfiddle:http://jsfiddle.net/zoutepopcorn/YXJpH/

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Untitled Document</title>

    <style>
          body {
            margin: 0px;
            padding: 0px;
          }
        </style>
    </head>

    <body>

    <div id="container"></div>
    <script src="http://www.html5canvastutorials.com/libraries/kinetic-v4.1.2.js"></script>
    <script src="setting.js"></script>
    <script src="imgStyle.js"></script>
    <script>
        var stage;
        var layer;
        setupStage();

        function setupStage() {
            stage = new Kinetic.Stage({
                  container: "container",
                  width: 800,
                  height: 800
                });
            layer = new Kinetic.Layer();
            messageLayer = new Kinetic.Layer();
            stage.add(messageLayer); …
Run Code Online (Sandbox Code Playgroud)

javascript html5 kineticjs

5
推荐指数
1
解决办法
360
查看次数

调试器中的console.log行号

我正在寻找一种简单的方法来制作日志功能.

我正在调用一个函数logSuc("return from Prom"),该函数在第30行.

因此代码将始终指向该函数的第30行.在控制台中:

安慰

所以说有这个代码:

const logSuc = (msg) => {
   console.log(`%c ${msg}`, 'background: green; color: white; display: block;'); 
};
Run Code Online (Sandbox Code Playgroud)

另一种选择可能是:

const log = console.log;
function red(msg) {
  return `%c ${msg}`, 'background: red; color: white; display: block;';
}
log(red('its red');
Run Code Online (Sandbox Code Playgroud)

但现在我有两个功能,我想保持简短

所以问题是我logSuc("") 总是指向第30行.

但我希望它指向我称之为logSuc行("有效").

html javascript console.log

5
推荐指数
1
解决办法
1055
查看次数

Mapbox 更改源属性

我想用mapbox制作一个簇层,是的,我做到了:D。但我希望能够将其关闭

所以我正在制作一个来源

        const source = {
            type: "geojson",
            data: {
                "type": "FeatureCollection",
                "features": []
            },
            cluster: true,
            clusterRadius: 10
        }
        this.map.addSource(id, source);
Run Code Online (Sandbox Code Playgroud)

现在我可以设置数据:

        this.map.getSource(this.id).setData({
            "type": "FeatureCollection",
            "features": this.createInnerCircles()
        })
Run Code Online (Sandbox Code Playgroud)

之后,我将设置簇和圆的图层。现在集群正在工作

但现在:我如何cluster: true从我的源设置为 false。好吧,也许我可以扔掉源代码并制作一个新的源代码,但这很丑陋。

所以丑陋的方式是

        const SOURCE = this.map.getSource(id);
        SOURCE._options.cluster = false;
        this.map.removeSource(id);
        this.map.addSource(id, SOURCE._options);
Run Code Online (Sandbox Code Playgroud)

哎呀,那不起作用,现在我得到:

Source "test" cannot be removed while layer "test-outer" is using it.
Run Code Online (Sandbox Code Playgroud)

更新

我能够启用/禁用集群感谢@Steve Bennett

Source "test" cannot be removed while layer "test-outer" is using it.
Run Code Online (Sandbox Code Playgroud)

javascript mapbox mapbox-gl mapbox-gl-js

3
推荐指数
1
解决办法
1416
查看次数