Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

后续会支持外部class吗? #33

Closed
Tyoon opened this issue Oct 1, 2019 · 6 comments
Closed

后续会支持外部class吗? #33

Tyoon opened this issue Oct 1, 2019 · 6 comments
Labels
question Further information is requested

Comments

@Tyoon
Copy link

Tyoon commented Oct 1, 2019

后续会支持外部class吗?

@jin-yufeng
Copy link
Owner

是指这个吗?使用外部样式

@Tyoon
Copy link
Author

Tyoon commented Oct 2, 2019

感谢您的回复,不是本地的wxss,是服务端的css,例如:
<link rel="stylesheet" href="style.css"/>
<div class="message">message</div>

@jin-yufeng
Copy link
Owner

如果用的是后端npm包的话是可以这样用link标签的(因为nodejs可以发起网络请求获取css的内容)
前端包不行,如果要用只能把这个css的所有内容放在style标签里,另外需要注意一下支持的选择器

@Tyoon
Copy link
Author

Tyoon commented Oct 2, 2019

可能我没描述清楚问题,我在服务端生成HTML,内容如下(服务器地址举例说明的,不是真实地址):
<link rel="stylesheet" href="https://www.server.com/style.css"/>
<div class="message">message</div>
这段内容通过接口返回给小程序,但是小程序并没有请求style.css(服务端有调试日志),所以没办法渲染出class="message"所对应的样式,这段内容在浏览器里都是能正常显示。
如果是把所有的css都通过style写在标签上,一是工作量太大,二是维护很不方便。

@jin-yufeng
Copy link
Owner

是的,目前前端插件包对于link标签是直接忽略的,所以没有请求style.css。因为在前端发起网络请求需要添加到列表,还需要花费比较长的时间,另外,由于前端时间和空间的限制,支持的选择器也比较少,所以没有支持这样的功能(个人设计上前端包的功能是轻量且快速的)
如果确有需要,可以在前端这样处理一下:

// 假设html是后台返回的字符串
var that = this;
// 获取css
var getStyle = function(html, links, i){
  if(i>=0){
    wx.request({
      url: links[i].match(/href=['"](\S+?)['"]/)[1],
      success(res){
        getStyle("<style>"+res.data+"</style>"+html, links, i-1);
      },
      fail(err){
        console.error(err);
      }
    })
  } else {
    that.setData({
      html
    })
  }
}
// 获取link
var links = html.match(/<link.*?>/g);
if(links)
  getStyle(html,links,links.length-1);
else {
  that.setData({
    html
  })
}

虽然把css写在style里比较难维护,不过就不用在前端请求耗时了😂
如果后台可以使用nodejs(或者用云函数),可以使用后端包解析,把解析结果返回前端,这样前端就不用解析了,可以直接显示
另外后端包可以直接解析link标签,还支持更多的选择器

var parser = require("parser-wxapp");
return await parser(html);

@Tyoon
Copy link
Author

Tyoon commented Oct 2, 2019

非常感谢您耐心的解答!我试一下您说的办法,我会推荐给其他朋友使用,谢谢!

@jin-yufeng jin-yufeng added the question Further information is requested label Oct 8, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question Further information is requested
Projects
None yet
Development

No branches or pull requests

2 participants