如何访问页面的脚本上下文

时间:2016-01-12 03:15:37

标签: javascript firefox-addon-sdk

我的插件使用内容脚本与页面进行交互。但它还需要访问页面的javascript,以便它可以运行页面的一个例程。所以我的内容脚本需要访问页面的脚本上下文。

这就是我的意思。

Addon使用main.js访问content.js并使用消息传递进行通信。

但是网页(正在注入content.js)拥有它自己的javascript。我的content.js需要访问该上下文,以便它可以从那里的变量中获取值。

怎么能得到那个?

我有been reading these mdn docs,但似乎他们正在讨论您自己编码的html页面,就像您对首选项页面一样。但在我的情况下,我正在使用外部网站,而不是仅为插件编码。

2 个答案:

答案 0 :(得分:0)

这有效:

var script = document.createElement("script");
script.innerHTML = "alert( myPageVar );";
document.body.appendChild( script );

Credit goes to this fellow

然而,我不知道这是否是最好的方法。我希望比我更有知识的人能回答。

以下是返回值的方法:

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); } } }可以使用。