我的插件使用内容脚本与页面进行交互。但它还需要访问页面的javascript,以便它可以运行页面的一个例程。所以我的内容脚本需要访问页面的脚本上下文。
这就是我的意思。
Addon使用main.js访问content.js并使用消息传递进行通信。
但是网页(正在注入content.js)拥有它自己的javascript。我的content.js需要访问该上下文,以便它可以从那里的变量中获取值。
怎么能得到那个?
我有been reading these mdn docs,但似乎他们正在讨论您自己编码的html页面,就像您对首选项页面一样。但在我的情况下,我正在使用外部网站,而不是仅为插件编码。
答案 0 :(得分:0)
这有效:
var script = document.createElement("script");
script.innerHTML = "alert( myPageVar );";
document.body.appendChild( script );
然而,我不知道这是否是最好的方法。我希望比我更有知识的人能回答。
以下是返回值的方法:
var retval = unsafeWindow.SomePageFunction();
alert(retval);
它被称为“不安全”,因为您永远不知道该页面可能会被更改或可能会更改。这就是插件interacts with page scripts时的方式。
答案 1 :(得分:0)
方法listed on the MDN page也适用于外部网页,而不仅仅是您自己的网页。
即。 MainActivity
public class MainActivity extends FragmentActivity {
private PagerSlidingTabStrip tabs;
private ViewPager pager;
private MyPagerAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tabs = (PagerSlidingTabStrip) findViewById(R.id.tabs);
pager = (ViewPager) findViewById(R.id.pager);
adapter = new MyPagerAdapter(getSupportFragmentManager());
pager.setAdapter(adapter);
final int pageMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 4, getResources()
.getDisplayMetrics());
pager.setPageMargin(pageMargin);
tabs.setViewPager(pager);
}
public class MyPagerAdapter extends FragmentPagerAdapter{
private final String[] TITLES = { "Contact", "Home"};
//private final int[] ICONS = { R.drawable.ic_contact, R.drawable.ic_home};
public MyPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public CharSequence getPageTitle(int position) {
return TITLES[position];
}
@Override
public int getCount() {
return TITLES.length;
}
@Override
public Fragment getItem(int position) {
return SuperAwesomeCardFragment.newInstance(position);
}
}
}
可以使用。