chrome extension, jstree, iframe: drag and drop

2019-08-10 05:47发布

问题:

I'm new to chrome extensions development and I'm building one that requires a side panel (not the popup), like firebug but on the right side. I'm using jsTree (with json_data) in the side panel and I want to drag elements from the webpage to the side panel.

So far, to create the side panel, I've used a div appended to the body with a z-index so that it appears above the webpage, but the elements' styles in my side panel are altered because of the website's css.

So I thought I could use an iframe to avoid any css incompatibility within my side panel. I create the iframe dynamically, with a src="chrome-extension:///page.html".

I've managed to make my jstree work fine in my iframe by loading the jquery+jstree scripts directly in the iframe's source page... that's pretty bad but I can't get the content script to be used for the iframe's source page (despite "all_frames": true).

I'd like to drag elements from the website's page into jstree in the iframe... I've found the iframeFix: true and refreshPositions: true, but that doesn't seem to change anything... Anyone knows how to do that?

If I don't use an iframe, according to the multiple examples on the web, I can easily drop an element to the jstree using the dnd plugin. I haven't tried it; even if it worked, the css in my side panel will be altered and I can't let that happen.

I've seen the "div layer above the iframe" technique. I can successfully drop an element from the webpage on that div above the iframe. But, when I try to post a message (containing the dropped elements' data) to the iframe through a port the iframe doesn't receive the message. My idea in this case is to somehow add the message to the json data of jstree.

I've read all the posts I've found about content_scripts and iframe, I know about the bugs... I can't figure out if it's fixed or not, and if it is, I don't know how to make the port communication between the ifram and the content script work. Anyone knows more about that?

I should also add that when I try to communicate between the content script and the iframe using a port, and copy the listener from the iframe in the background page, the background page receives the message just fine... which just means that the port communication is working fine I suppose, but not between the content script and the iframe...

Any thoughts? I'm really stuck

回答1:

answering my own question; I haven't found a solution on how to use iframes in a chrome-extension with jstree.

I'm just going for the hardcore way; append a <div> to the <body>, and make sure by doing a lot of testing that the css inside my <div> will remain isolated from the webpage's css.

Cheers